home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cocktail / puma.lha / puma / src / Tree.mi < prev    next >
Text File  |  1992-09-25  |  131KB  |  3,923 lines

  1. IMPLEMENTATION MODULE Tree;
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95. IMPORT SYSTEM, System, General, Memory, DynArray, IO, Layout, StringMem, Strings, Idents, Texts, Sets, Positions;
  96. (* line 143 "" *)
  97.  
  98.  
  99. FROM SYSTEM    IMPORT ADR, ADDRESS, TSIZE;
  100. FROM DynArray    IMPORT MakeArray;
  101. FROM IO        IMPORT tFile, StdOutput, ReadI, WriteS, WriteI, WriteC, WriteNl;
  102. FROM Strings    IMPORT tString, ArrayToString, Concatenate, Length, Char;
  103. FROM StringMem    IMPORT tStringRef, WriteString;
  104. FROM Idents    IMPORT tIdent, NoIdent, GetString, WriteIdent, MakeIdent, MaxIdent;
  105. FROM Texts    IMPORT tText, MakeText;
  106. FROM Sets    IMPORT tSet, Include, IsElement, MakeSet;
  107. FROM Relations    IMPORT tRelation, IsRelated, MakeRelation;
  108. FROM Positions    IMPORT tPosition;
  109.  
  110. IMPORT Relations, Errors;
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118. VAR IdentToClassPtr    : POINTER TO ARRAY [0..1000000] OF tTree;
  119. VAR IdentToClassSize    : LONGINT;
  120. VAR sIdentToClassSize    : tIdent;
  121.  
  122. PROCEDURE InitIdentifyClass (t: tTree);
  123.    VAR i: INTEGER;
  124.    BEGIN
  125.       IdentToClassSize := MaxIdent () + 1;
  126.       sIdentToClassSize := IdentToClassSize;
  127.       MakeArray (IdentToClassPtr, IdentToClassSize, TSIZE (tTree));
  128.       FOR i := 0 TO IdentToClassSize - 1 DO
  129.      IdentToClassPtr^ [i] := NoTree;
  130.       END;
  131.       ForallClasses (t, InitIdentifyClass2);
  132.    END InitIdentifyClass;
  133.  
  134. PROCEDURE InitIdentifyClass2 (t: tTree);
  135.    BEGIN
  136.       IdentToClassPtr^ [t^.Class.Name] := t;
  137.    END InitIdentifyClass2;
  138.  
  139. PROCEDURE IdentifyClass (t: tTree; Ident: tIdent): tTree;
  140.    BEGIN
  141.       IF Ident < sIdentToClassSize THEN RETURN IdentToClassPtr^ [Ident]; END;
  142.       RETURN NoTree;
  143.    END IdentifyClass;
  144.  
  145. PROCEDURE IdentifyAttribute (t: tTree; Ident: tIdent): tTree;
  146.    VAR attribute    : tTree;
  147.    BEGIN
  148.       LOOP
  149.      CASE t^.Kind OF
  150.      | Class:
  151.            attribute := IdentifyAttribute (t^.Class.BaseClass, Ident);
  152.            IF attribute # NoTree THEN RETURN attribute; END;
  153.            t := t^.Class.Attributes;
  154.             (* RETURN IdentifyAttribute (t^.Class.Attributes, Ident); *)
  155.      | Child:
  156.            IF t^.Child.Name = Ident THEN RETURN t; END;
  157.            t := t^.Child.Next;
  158.             (* RETURN IdentifyAttribute (t^.Child.Next, Ident); *)
  159.      | Attribute:
  160.            IF t^.Attribute.Name = Ident THEN RETURN t; END;
  161.            t := t^.Attribute.Next;
  162.             (* RETURN IdentifyAttribute (t^.Attribute.Next, Ident); *)
  163.      | ActionPart:
  164.            t := t^.ActionPart.Next;
  165.             (* RETURN IdentifyAttribute (t^.ActionPart.Next, Ident); *)
  166.      ELSE
  167.            RETURN NoTree;
  168.      END;
  169.       END;
  170.    END IdentifyAttribute;
  171.  
  172. PROCEDURE ForallClasses (t: tTree; Proc: ProcOfT);
  173.    BEGIN
  174.       WHILE t^.Kind = Class DO
  175.      Proc (t);
  176.      ForallClasses (t^.Class.Extensions, Proc);
  177.      t := t^.Class.Next;        (* ForallClasses (t^.Class.Next, Proc); *)
  178.       END;
  179.    END ForallClasses;
  180.  
  181. PROCEDURE ForallAttributes (t: tTree; Proc: ProcOfT);
  182.    BEGIN
  183.       LOOP
  184.      CASE t^.Kind OF
  185.      | Class:
  186.            ForallAttributes (t^.Class.BaseClass, Proc);
  187.            t := t^.Class.Attributes; (* ForallAttributes (t^.Class.Attributes, Proc); *)
  188.      | Child:
  189.            Proc (t);
  190.            t := t^.Child.Next;    (* ForallAttributes (t^.Child.Next, Proc); *)
  191.      | Attribute:
  192.            Proc (t);
  193.            t := t^.Attribute.Next;    (* ForallAttributes (t^.Attribute.Next, Proc); *)
  194.      | ActionPart:
  195.            Proc (t);
  196.            t := t^.ActionPart.Next;    (* ForallAttributes (t^.ActionPart.Next, Proc); *)
  197.      ELSE
  198.            RETURN;
  199.      END;
  200.       END;
  201.    END ForallAttributes;
  202.  
  203. PROCEDURE Error (ErrorCode: INTEGER; Pos: tPosition);
  204.    BEGIN
  205.       Errors.ErrorMessage (ErrorCode, Errors.Error, Pos);
  206.       INC (ErrorCount);
  207.    END Error;
  208.  
  209. PROCEDURE Warning (ErrorCode: INTEGER; Pos: tPosition);
  210.    BEGIN
  211.       Errors.ErrorMessage (ErrorCode, Errors.Warning, Pos);
  212.    END Warning;
  213.  
  214. PROCEDURE Information (ErrorCode: INTEGER; Pos: tPosition);
  215.    BEGIN
  216.       Errors.ErrorMessage (ErrorCode, Errors.Information, Pos);
  217.    END Information;
  218.  
  219. PROCEDURE ErrorI (ErrorCode: INTEGER; Pos: tPosition; iClass: INTEGER; iPtr: ADDRESS);
  220.    BEGIN
  221.       Errors.ErrorMessageI (ErrorCode, Errors.Error, Pos, iClass, iPtr);
  222.       INC (ErrorCount);
  223.    END ErrorI;
  224.  
  225. PROCEDURE WarningI (ErrorCode: INTEGER; Pos: tPosition; iClass: INTEGER; iPtr: ADDRESS);
  226.    BEGIN
  227.       Errors.ErrorMessageI (ErrorCode, Errors.Warning, Pos, iClass, iPtr);
  228.    END WarningI;
  229.  
  230. PROCEDURE InformationI (ErrorCode: INTEGER; Pos: tPosition; iClass: INTEGER; iPtr: ADDRESS);
  231.    BEGIN
  232.       Errors.ErrorMessageI (ErrorCode, Errors.Information, Pos, iClass, iPtr);
  233.    END InformationI;
  234.  
  235. PROCEDURE WI (i: tIdent); BEGIN WriteIdent (f, i); END WI;
  236.  
  237. PROCEDURE WE (i: tIdent);
  238.    VAR s: tString; Ch: CHAR; j: SHORTCARD;
  239.    BEGIN
  240.       GetString (i, s);
  241.       FOR j := 1 TO Length (s) DO
  242.          Ch := Char (s, j);
  243.          IF (Ch = '{') OR (Ch = '}') OR (Ch = '\') THEN WriteC (f, '\'); END;
  244.          WriteC (f, Ch);
  245.       END;
  246.    END WE;
  247.  
  248. PROCEDURE WN (n: INTEGER); BEGIN WriteI (f, n, 0); END WN;
  249.  
  250. (* line 417 "" *)
  251. (* line 822 "" *)
  252.  
  253. CONST yyBlockSize = 20480;
  254.  
  255. TYPE
  256.  yytBlockPtr    = POINTER TO yytBlock;
  257.  yytBlock    = RECORD
  258.              yyBlock    : ARRAY [1..yyBlockSize] OF CHAR;
  259.              yySuccessor: yytBlockPtr;
  260.           END;
  261.  
  262. VAR yyBlockList    : yytBlockPtr;
  263. VAR yyMaxSize, yyi    : SHORTCARD;
  264. VAR yyTypeRange    : ARRAY [0..129] OF SHORTCARD;
  265.  
  266. PROCEDURE yyAlloc (): tTree;
  267.  VAR yyBlockPtr    : yytBlockPtr;
  268.  BEGIN
  269.   yyBlockPtr    := yyBlockList;
  270.   yyBlockList    := Memory.Alloc (SYSTEM.TSIZE (yytBlock));
  271.   yyBlockList^.yySuccessor := yyBlockPtr;
  272.   yyPoolFreePtr    := SYSTEM.ADR (yyBlockList^.yyBlock);
  273.   yyPoolMaxPtr    := yyPoolFreePtr + yyBlockSize - yyMaxSize + 1;
  274.   INC (HeapUsed, yyBlockSize);
  275.   RETURN yyPoolFreePtr;
  276.  END yyAlloc;
  277.  
  278. PROCEDURE MakeTree (yyKind: SHORTCARD): tTree;
  279.  VAR yyByteCount    : LONGINT;
  280.  VAR yyt    : tTree;
  281.  BEGIN
  282.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [yyKind]);
  283.   yyt^.yyHead.yyMark := 0;
  284.   yyt^.Kind := yyKind;
  285.   RETURN yyt;
  286.  END MakeTree;
  287.  
  288. PROCEDURE IsType (yyTree: tTree; yyKind: SHORTCARD): BOOLEAN;
  289.  BEGIN
  290.   RETURN (yyTree # NoTree) AND (yyKind <= yyTree^.Kind) AND (yyTree^.Kind <= yyTypeRange [yyKind]);
  291.  END IsType;
  292.  
  293.  
  294. PROCEDURE mClasses (): tTree;
  295.  VAR yyByteCount    : LONGINT;
  296.  VAR yyt    : tTree;
  297.  BEGIN
  298.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Classes]);
  299.   yyt^.yyHead.yyMark := 0;
  300.   yyt^.Kind := Classes;
  301.   RETURN yyt;
  302.  END mClasses;
  303.  
  304. PROCEDURE mNoClass (): tTree;
  305.  VAR yyByteCount    : LONGINT;
  306.  VAR yyt    : tTree;
  307.  BEGIN
  308.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoClass]);
  309.   yyt^.yyHead.yyMark := 0;
  310.   yyt^.Kind := NoClass;
  311.   RETURN yyt;
  312.  END mNoClass;
  313.  
  314. PROCEDURE mClass (pName: tIdent; pProperties: tClassProperties; pAttributes: tTree; pExtensions: tTree; pNext: tTree): tTree;
  315.  VAR yyByteCount    : LONGINT;
  316.  VAR yyt    : tTree;
  317.  BEGIN
  318.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Class]);
  319.   yyt^.yyHead.yyMark := 0;
  320.   yyt^.Kind := Class;
  321.   WITH yyt^.Class DO
  322.    Name := pName;
  323.    Properties := pProperties;
  324.    Attributes := pAttributes;
  325.    Extensions := pExtensions;
  326.    Next := pNext;
  327.    BaseClass := NoTree;
  328.    Formals := NoTree;
  329.    TypeDesc := NoTree;
  330.    
  331.   END;
  332.   RETURN yyt;
  333.  END mClass;
  334.  
  335. PROCEDURE mAttributes (): tTree;
  336.  VAR yyByteCount    : LONGINT;
  337.  VAR yyt    : tTree;
  338.  BEGIN
  339.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Attributes]);
  340.   yyt^.yyHead.yyMark := 0;
  341.   yyt^.Kind := Attributes;
  342.   RETURN yyt;
  343.  END mAttributes;
  344.  
  345. PROCEDURE mNoAttribute (): tTree;
  346.  VAR yyByteCount    : LONGINT;
  347.  VAR yyt    : tTree;
  348.  BEGIN
  349.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoAttribute]);
  350.   yyt^.yyHead.yyMark := 0;
  351.   yyt^.Kind := NoAttribute;
  352.   RETURN yyt;
  353.  END mNoAttribute;
  354.  
  355. PROCEDURE mAttrOrAction (pNext: tTree): tTree;
  356.  VAR yyByteCount    : LONGINT;
  357.  VAR yyt    : tTree;
  358.  BEGIN
  359.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [AttrOrAction]);
  360.   yyt^.yyHead.yyMark := 0;
  361.   yyt^.Kind := AttrOrAction;
  362.   WITH yyt^.AttrOrAction DO
  363.    Next := pNext;
  364.   END;
  365.   RETURN yyt;
  366.  END mAttrOrAction;
  367.  
  368. PROCEDURE mChild (pNext: tTree; pName: tIdent; pType: tIdent; pProperties: tAttrProperties): tTree;
  369.  VAR yyByteCount    : LONGINT;
  370.  VAR yyt    : tTree;
  371.  BEGIN
  372.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Child]);
  373.   yyt^.yyHead.yyMark := 0;
  374.   yyt^.Kind := Child;
  375.   WITH yyt^.Child DO
  376.    Next := pNext;
  377.    Name := pName;
  378.    Type := pType;
  379.    Properties := pProperties;
  380.   END;
  381.   RETURN yyt;
  382.  END mChild;
  383.  
  384. PROCEDURE mAttribute (pNext: tTree; pName: tIdent; pType: tIdent; pProperties: tAttrProperties): tTree;
  385.  VAR yyByteCount    : LONGINT;
  386.  VAR yyt    : tTree;
  387.  BEGIN
  388.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Attribute]);
  389.   yyt^.yyHead.yyMark := 0;
  390.   yyt^.Kind := Attribute;
  391.   WITH yyt^.Attribute DO
  392.    Next := pNext;
  393.    Name := pName;
  394.    Type := pType;
  395.    Properties := pProperties;
  396.   END;
  397.   RETURN yyt;
  398.  END mAttribute;
  399.  
  400. PROCEDURE mActionPart (pNext: tTree): tTree;
  401.  VAR yyByteCount    : LONGINT;
  402.  VAR yyt    : tTree;
  403.  BEGIN
  404.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [ActionPart]);
  405.   yyt^.yyHead.yyMark := 0;
  406.   yyt^.Kind := ActionPart;
  407.   WITH yyt^.ActionPart DO
  408.    Next := pNext;
  409.   END;
  410.   RETURN yyt;
  411.  END mActionPart;
  412.  
  413. PROCEDURE mCodes (pExport: tText; pImport: tText; pGlobal: tText; pLocal: tText; pBegin: tText; pClose: tText; pExportLine: tPosition; pImportLine: tPosition; pGlobalLine: tPosition; pLocalLine: tPosition; pBeginLine: tPosition; pCloseLine: tPosition): tTree;
  414.  VAR yyByteCount    : LONGINT;
  415.  VAR yyt    : tTree;
  416.  BEGIN
  417.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Codes]);
  418.   yyt^.yyHead.yyMark := 0;
  419.   yyt^.Kind := Codes;
  420.   WITH yyt^.Codes DO
  421.    Export := pExport;
  422.    Import := pImport;
  423.    Global := pGlobal;
  424.    Local := pLocal;
  425.    Begin := pBegin;
  426.    Close := pClose;
  427.    ExportLine := pExportLine;
  428.    ImportLine := pImportLine;
  429.    GlobalLine := pGlobalLine;
  430.    LocalLine := pLocalLine;
  431.    BeginLine := pBeginLine;
  432.    CloseLine := pCloseLine;
  433.   END;
  434.   RETURN yyt;
  435.  END mCodes;
  436.  
  437. PROCEDURE mDesignators (): tTree;
  438.  VAR yyByteCount    : LONGINT;
  439.  VAR yyt    : tTree;
  440.  BEGIN
  441.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Designators]);
  442.   yyt^.yyHead.yyMark := 0;
  443.   yyt^.Kind := Designators;
  444.   RETURN yyt;
  445.  END mDesignators;
  446.  
  447. PROCEDURE mNoDesignator (): tTree;
  448.  VAR yyByteCount    : LONGINT;
  449.  VAR yyt    : tTree;
  450.  BEGIN
  451.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoDesignator]);
  452.   yyt^.yyHead.yyMark := 0;
  453.   yyt^.Kind := NoDesignator;
  454.   RETURN yyt;
  455.  END mNoDesignator;
  456.  
  457. PROCEDURE mDesignator (pSelector: tIdent; pAttribute: tIdent; pPos: tPosition; pNext: tTree): tTree;
  458.  VAR yyByteCount    : LONGINT;
  459.  VAR yyt    : tTree;
  460.  BEGIN
  461.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Designator]);
  462.   yyt^.yyHead.yyMark := 0;
  463.   yyt^.Kind := Designator;
  464.   WITH yyt^.Designator DO
  465.    Selector := pSelector;
  466.    Attribute := pAttribute;
  467.    Pos := pPos;
  468.    Next := pNext;
  469.    
  470.    Type := NoIdent;
  471.   END;
  472.   RETURN yyt;
  473.  END mDesignator;
  474.  
  475. PROCEDURE mIdent (pAttribute: tIdent; pPos: tPosition; pNext: tTree): tTree;
  476.  VAR yyByteCount    : LONGINT;
  477.  VAR yyt    : tTree;
  478.  BEGIN
  479.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Ident]);
  480.   yyt^.yyHead.yyMark := 0;
  481.   yyt^.Kind := Ident;
  482.   WITH yyt^.Ident DO
  483.    Attribute := pAttribute;
  484.    Pos := pPos;
  485.    Next := pNext;
  486.   END;
  487.   RETURN yyt;
  488.  END mIdent;
  489.  
  490. PROCEDURE mRemote (pDesignators: tTree; pType: tIdent; pAttribute: tIdent; pPos: tPosition; pNext: tTree): tTree;
  491.  VAR yyByteCount    : LONGINT;
  492.  VAR yyt    : tTree;
  493.  BEGIN
  494.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Remote]);
  495.   yyt^.yyHead.yyMark := 0;
  496.   yyt^.Kind := Remote;
  497.   WITH yyt^.Remote DO
  498.    Designators := pDesignators;
  499.    Type := pType;
  500.    Attribute := pAttribute;
  501.    Pos := pPos;
  502.    Next := pNext;
  503.   END;
  504.   RETURN yyt;
  505.  END mRemote;
  506.  
  507. PROCEDURE mAny (pCode: tStringRef; pNext: tTree): tTree;
  508.  VAR yyByteCount    : LONGINT;
  509.  VAR yyt    : tTree;
  510.  BEGIN
  511.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Any]);
  512.   yyt^.yyHead.yyMark := 0;
  513.   yyt^.Kind := Any;
  514.   WITH yyt^.Any DO
  515.    Code := pCode;
  516.    Next := pNext;
  517.   END;
  518.   RETURN yyt;
  519.  END mAny;
  520.  
  521. PROCEDURE mAnys (pLayouts: tTree; pNext: tTree): tTree;
  522.  VAR yyByteCount    : LONGINT;
  523.  VAR yyt    : tTree;
  524.  BEGIN
  525.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Anys]);
  526.   yyt^.yyHead.yyMark := 0;
  527.   yyt^.Kind := Anys;
  528.   WITH yyt^.Anys DO
  529.    Layouts := pLayouts;
  530.    Next := pNext;
  531.   END;
  532.   RETURN yyt;
  533.  END mAnys;
  534.  
  535. PROCEDURE mLayouts (): tTree;
  536.  VAR yyByteCount    : LONGINT;
  537.  VAR yyt    : tTree;
  538.  BEGIN
  539.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Layouts]);
  540.   yyt^.yyHead.yyMark := 0;
  541.   yyt^.Kind := Layouts;
  542.   RETURN yyt;
  543.  END mLayouts;
  544.  
  545. PROCEDURE mNoLayout (): tTree;
  546.  VAR yyByteCount    : LONGINT;
  547.  VAR yyt    : tTree;
  548.  BEGIN
  549.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoLayout]);
  550.   yyt^.yyHead.yyMark := 0;
  551.   yyt^.Kind := NoLayout;
  552.   RETURN yyt;
  553.  END mNoLayout;
  554.  
  555. PROCEDURE mLayoutAny (pCode: tStringRef; pNext: tTree): tTree;
  556.  VAR yyByteCount    : LONGINT;
  557.  VAR yyt    : tTree;
  558.  BEGIN
  559.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [LayoutAny]);
  560.   yyt^.yyHead.yyMark := 0;
  561.   yyt^.Kind := LayoutAny;
  562.   WITH yyt^.LayoutAny DO
  563.    Code := pCode;
  564.    Next := pNext;
  565.   END;
  566.   RETURN yyt;
  567.  END mLayoutAny;
  568.  
  569. PROCEDURE mNames (): tTree;
  570.  VAR yyByteCount    : LONGINT;
  571.  VAR yyt    : tTree;
  572.  BEGIN
  573.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Names]);
  574.   yyt^.yyHead.yyMark := 0;
  575.   yyt^.Kind := Names;
  576.   RETURN yyt;
  577.  END mNames;
  578.  
  579. PROCEDURE mNoName (): tTree;
  580.  VAR yyByteCount    : LONGINT;
  581.  VAR yyt    : tTree;
  582.  BEGIN
  583.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoName]);
  584.   yyt^.yyHead.yyMark := 0;
  585.   yyt^.Kind := NoName;
  586.   RETURN yyt;
  587.  END mNoName;
  588.  
  589. PROCEDURE mName (pName: tIdent; pPos: tPosition; pNext: tTree): tTree;
  590.  VAR yyByteCount    : LONGINT;
  591.  VAR yyt    : tTree;
  592.  BEGIN
  593.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Name]);
  594.   yyt^.yyHead.yyMark := 0;
  595.   yyt^.Kind := Name;
  596.   WITH yyt^.Name DO
  597.    Name := pName;
  598.    Pos := pPos;
  599.    Next := pNext;
  600.    
  601.   END;
  602.   RETURN yyt;
  603.  END mName;
  604.  
  605. PROCEDURE mSpec (pTrafoName: tIdent; pTreeNames: tTree; pPublic: tTree; pExtern: tTree; pCodes: tTree; pRoutines: tTree): tTree;
  606.  VAR yyByteCount    : LONGINT;
  607.  VAR yyt    : tTree;
  608.  BEGIN
  609.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Spec]);
  610.   yyt^.yyHead.yyMark := 0;
  611.   yyt^.Kind := Spec;
  612.   WITH yyt^.Spec DO
  613.    TrafoName := pTrafoName;
  614.    TreeNames := pTreeNames;
  615.    Public := pPublic;
  616.    Extern := pExtern;
  617.    Codes := pCodes;
  618.    Routines := pRoutines;
  619.   END;
  620.   RETURN yyt;
  621.  END mSpec;
  622.  
  623. PROCEDURE mTreeNames (): tTree;
  624.  VAR yyByteCount    : LONGINT;
  625.  VAR yyt    : tTree;
  626.  BEGIN
  627.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [TreeNames]);
  628.   yyt^.yyHead.yyMark := 0;
  629.   yyt^.Kind := TreeNames;
  630.   RETURN yyt;
  631.  END mTreeNames;
  632.  
  633. PROCEDURE mNoTreeName (): tTree;
  634.  VAR yyByteCount    : LONGINT;
  635.  VAR yyt    : tTree;
  636.  BEGIN
  637.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoTreeName]);
  638.   yyt^.yyHead.yyMark := 0;
  639.   yyt^.Kind := NoTreeName;
  640.   RETURN yyt;
  641.  END mNoTreeName;
  642.  
  643. PROCEDURE mTreeName (pName: tIdent; pPos: tPosition; pNext: tTree): tTree;
  644.  VAR yyByteCount    : LONGINT;
  645.  VAR yyt    : tTree;
  646.  BEGIN
  647.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [TreeName]);
  648.   yyt^.yyHead.yyMark := 0;
  649.   yyt^.Kind := TreeName;
  650.   WITH yyt^.TreeName DO
  651.    Name := pName;
  652.    Pos := pPos;
  653.    Next := pNext;
  654.    Classes := NoTree;
  655.    
  656.   END;
  657.   RETURN yyt;
  658.  END mTreeName;
  659.  
  660. PROCEDURE mRoutines (): tTree;
  661.  VAR yyByteCount    : LONGINT;
  662.  VAR yyt    : tTree;
  663.  BEGIN
  664.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Routines]);
  665.   yyt^.yyHead.yyMark := 0;
  666.   yyt^.Kind := Routines;
  667.   RETURN yyt;
  668.  END mRoutines;
  669.  
  670. PROCEDURE mNoRoutine (): tTree;
  671.  VAR yyByteCount    : LONGINT;
  672.  VAR yyt    : tTree;
  673.  BEGIN
  674.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoRoutine]);
  675.   yyt^.yyHead.yyMark := 0;
  676.   yyt^.Kind := NoRoutine;
  677.   RETURN yyt;
  678.  END mNoRoutine;
  679.  
  680. PROCEDURE mRoutine (pNext: tTree; pName: tIdent; pPos: tPosition; pInParams: tTree; pOutParams: tTree; pExtern: tTree; pLocal: tText; pLocalLine: tPosition; pRules: tTree): tTree;
  681.  VAR yyByteCount    : LONGINT;
  682.  VAR yyt    : tTree;
  683.  BEGIN
  684.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Routine]);
  685.   yyt^.yyHead.yyMark := 0;
  686.   yyt^.Kind := Routine;
  687.   WITH yyt^.Routine DO
  688.    Next := pNext;
  689.    Name := pName;
  690.    Pos := pPos;
  691.    InParams := pInParams;
  692.    OutParams := pOutParams;
  693.    Extern := pExtern;
  694.    Local := pLocal;
  695.    LocalLine := pLocalLine;
  696.    Rules := pRules;
  697.    InForm := NoTree;
  698.    OutForm := NoTree;
  699.    ParamDecls := NoTree;
  700.    IsExtern := FALSE;
  701.    Decisions := NoTree;
  702.   END;
  703.   RETURN yyt;
  704.  END mRoutine;
  705.  
  706. PROCEDURE mProcedure (pNext: tTree; pName: tIdent; pPos: tPosition; pInParams: tTree; pOutParams: tTree; pExtern: tTree; pLocal: tText; pLocalLine: tPosition; pRules: tTree): tTree;
  707.  VAR yyByteCount    : LONGINT;
  708.  VAR yyt    : tTree;
  709.  BEGIN
  710.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Procedure]);
  711.   yyt^.yyHead.yyMark := 0;
  712.   yyt^.Kind := Procedure;
  713.   WITH yyt^.Procedure DO
  714.    Next := pNext;
  715.    Name := pName;
  716.    Pos := pPos;
  717.    InParams := pInParams;
  718.    OutParams := pOutParams;
  719.    Extern := pExtern;
  720.    Local := pLocal;
  721.    LocalLine := pLocalLine;
  722.    Rules := pRules;
  723.    InForm := NoTree;
  724.    OutForm := NoTree;
  725.    ParamDecls := NoTree;
  726.    IsExtern := FALSE;
  727.    Decisions := NoTree;
  728.   END;
  729.   RETURN yyt;
  730.  END mProcedure;
  731.  
  732. PROCEDURE mFunction (pNext: tTree; pName: tIdent; pPos: tPosition; pInParams: tTree; pOutParams: tTree; pExtern: tTree; pLocal: tText; pLocalLine: tPosition; pRules: tTree; pReturnParams: tTree): tTree;
  733.  VAR yyByteCount    : LONGINT;
  734.  VAR yyt    : tTree;
  735.  BEGIN
  736.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Function]);
  737.   yyt^.yyHead.yyMark := 0;
  738.   yyt^.Kind := Function;
  739.   WITH yyt^.Function DO
  740.    Next := pNext;
  741.    Name := pName;
  742.    Pos := pPos;
  743.    InParams := pInParams;
  744.    OutParams := pOutParams;
  745.    Extern := pExtern;
  746.    Local := pLocal;
  747.    LocalLine := pLocalLine;
  748.    Rules := pRules;
  749.    InForm := NoTree;
  750.    OutForm := NoTree;
  751.    ParamDecls := NoTree;
  752.    IsExtern := FALSE;
  753.    Decisions := NoTree;
  754.    ReturnParams := pReturnParams;
  755.    ReturnForm := NoTree;
  756.   END;
  757.   RETURN yyt;
  758.  END mFunction;
  759.  
  760. PROCEDURE mPredicate (pNext: tTree; pName: tIdent; pPos: tPosition; pInParams: tTree; pOutParams: tTree; pExtern: tTree; pLocal: tText; pLocalLine: tPosition; pRules: tTree): tTree;
  761.  VAR yyByteCount    : LONGINT;
  762.  VAR yyt    : tTree;
  763.  BEGIN
  764.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Predicate]);
  765.   yyt^.yyHead.yyMark := 0;
  766.   yyt^.Kind := Predicate;
  767.   WITH yyt^.Predicate DO
  768.    Next := pNext;
  769.    Name := pName;
  770.    Pos := pPos;
  771.    InParams := pInParams;
  772.    OutParams := pOutParams;
  773.    Extern := pExtern;
  774.    Local := pLocal;
  775.    LocalLine := pLocalLine;
  776.    Rules := pRules;
  777.    InForm := NoTree;
  778.    OutForm := NoTree;
  779.    ParamDecls := NoTree;
  780.    IsExtern := FALSE;
  781.    Decisions := NoTree;
  782.   END;
  783.   RETURN yyt;
  784.  END mPredicate;
  785.  
  786. PROCEDURE mParameters (): tTree;
  787.  VAR yyByteCount    : LONGINT;
  788.  VAR yyt    : tTree;
  789.  BEGIN
  790.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Parameters]);
  791.   yyt^.yyHead.yyMark := 0;
  792.   yyt^.Kind := Parameters;
  793.   RETURN yyt;
  794.  END mParameters;
  795.  
  796. PROCEDURE mNoParameter (): tTree;
  797.  VAR yyByteCount    : LONGINT;
  798.  VAR yyt    : tTree;
  799.  BEGIN
  800.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoParameter]);
  801.   yyt^.yyHead.yyMark := 0;
  802.   yyt^.Kind := NoParameter;
  803.   RETURN yyt;
  804.  END mNoParameter;
  805.  
  806. PROCEDURE mParam (pIsRef: BOOLEAN; pName: tIdent; pPos: tPosition; pType: tTree; pNext: tTree): tTree;
  807.  VAR yyByteCount    : LONGINT;
  808.  VAR yyt    : tTree;
  809.  BEGIN
  810.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Param]);
  811.   yyt^.yyHead.yyMark := 0;
  812.   yyt^.Kind := Param;
  813.   WITH yyt^.Param DO
  814.    IsRef := pIsRef;
  815.    Name := pName;
  816.    Pos := pPos;
  817.    Type := pType;
  818.    Next := pNext;
  819.   END;
  820.   RETURN yyt;
  821.  END mParam;
  822.  
  823. PROCEDURE mType (pName: tIdent; pPos: tPosition; pNames: tTree): tTree;
  824.  VAR yyByteCount    : LONGINT;
  825.  VAR yyt    : tTree;
  826.  BEGIN
  827.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Type]);
  828.   yyt^.yyHead.yyMark := 0;
  829.   yyt^.Kind := Type;
  830.   WITH yyt^.Type DO
  831.    Name := pName;
  832.    Pos := pPos;
  833.    Names := pNames;
  834.   END;
  835.   RETURN yyt;
  836.  END mType;
  837.  
  838. PROCEDURE mRules (): tTree;
  839.  VAR yyByteCount    : LONGINT;
  840.  VAR yyt    : tTree;
  841.  BEGIN
  842.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Rules]);
  843.   yyt^.yyHead.yyMark := 0;
  844.   yyt^.Kind := Rules;
  845.   RETURN yyt;
  846.  END mRules;
  847.  
  848. PROCEDURE mNoRule (): tTree;
  849.  VAR yyByteCount    : LONGINT;
  850.  VAR yyt    : tTree;
  851.  BEGIN
  852.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoRule]);
  853.   yyt^.yyHead.yyMark := 0;
  854.   yyt^.Kind := NoRule;
  855.   RETURN yyt;
  856.  END mNoRule;
  857.  
  858. PROCEDURE mRule (pLine: tPosition; pPatterns: tTree; pExprs: tTree; pExpr: tTree; pStatements: tTree; pNext: tTree): tTree;
  859.  VAR yyByteCount    : LONGINT;
  860.  VAR yyt    : tTree;
  861.  BEGIN
  862.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Rule]);
  863.   yyt^.yyHead.yyMark := 0;
  864.   yyt^.Kind := Rule;
  865.   WITH yyt^.Rule DO
  866.    Line := pLine;
  867.    Patterns := pPatterns;
  868.    Exprs := pExprs;
  869.    Expr := pExpr;
  870.    Statements := pStatements;
  871.    Next := pNext;
  872.    VarDecls := NoTree;
  873.    HasTempos := FALSE;
  874.    HasPatterns := FALSE;
  875.    Tempo := NoIdent;
  876.    
  877.    Tests := NoTree;
  878.    HasExit := FALSE;
  879.    HasAssign := FALSE;
  880.    HasTargetCode := FALSE;
  881.    HasRejectOrFail := FALSE;
  882.   END;
  883.   RETURN yyt;
  884.  END mRule;
  885.  
  886. PROCEDURE mPatterns (): tTree;
  887.  VAR yyByteCount    : LONGINT;
  888.  VAR yyt    : tTree;
  889.  BEGIN
  890.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Patterns]);
  891.   yyt^.yyHead.yyMark := 0;
  892.   yyt^.Kind := Patterns;
  893.   RETURN yyt;
  894.  END mPatterns;
  895.  
  896. PROCEDURE mNoPattern (pPos: tPosition): tTree;
  897.  VAR yyByteCount    : LONGINT;
  898.  VAR yyt    : tTree;
  899.  BEGIN
  900.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoPattern]);
  901.   yyt^.yyHead.yyMark := 0;
  902.   yyt^.Kind := NoPattern;
  903.   WITH yyt^.NoPattern DO
  904.    Pos := pPos;
  905.   END;
  906.   RETURN yyt;
  907.  END mNoPattern;
  908.  
  909. PROCEDURE mOnePattern (pPattern: tTree; pNext: tTree): tTree;
  910.  VAR yyByteCount    : LONGINT;
  911.  VAR yyt    : tTree;
  912.  BEGIN
  913.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [OnePattern]);
  914.   yyt^.yyHead.yyMark := 0;
  915.   yyt^.Kind := OnePattern;
  916.   WITH yyt^.OnePattern DO
  917.    Pattern := pPattern;
  918.    Next := pNext;
  919.   END;
  920.   RETURN yyt;
  921.  END mOnePattern;
  922.  
  923. PROCEDURE mPatternsList (): tTree;
  924.  VAR yyByteCount    : LONGINT;
  925.  VAR yyt    : tTree;
  926.  BEGIN
  927.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [PatternsList]);
  928.   yyt^.yyHead.yyMark := 0;
  929.   yyt^.Kind := PatternsList;
  930.   RETURN yyt;
  931.  END mPatternsList;
  932.  
  933. PROCEDURE mNoPatternsList (): tTree;
  934.  VAR yyByteCount    : LONGINT;
  935.  VAR yyt    : tTree;
  936.  BEGIN
  937.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoPatternsList]);
  938.   yyt^.yyHead.yyMark := 0;
  939.   yyt^.Kind := NoPatternsList;
  940.   RETURN yyt;
  941.  END mNoPatternsList;
  942.  
  943. PROCEDURE mOnePatternsList (pPatterns: tTree; pNext: tTree): tTree;
  944.  VAR yyByteCount    : LONGINT;
  945.  VAR yyt    : tTree;
  946.  BEGIN
  947.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [OnePatternsList]);
  948.   yyt^.yyHead.yyMark := 0;
  949.   yyt^.Kind := OnePatternsList;
  950.   WITH yyt^.OnePatternsList DO
  951.    Patterns := pPatterns;
  952.    Next := pNext;
  953.   END;
  954.   RETURN yyt;
  955.  END mOnePatternsList;
  956.  
  957. PROCEDURE mPattern (pPos: tPosition): tTree;
  958.  VAR yyByteCount    : LONGINT;
  959.  VAR yyt    : tTree;
  960.  BEGIN
  961.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Pattern]);
  962.   yyt^.yyHead.yyMark := 0;
  963.   yyt^.Kind := Pattern;
  964.   WITH yyt^.Pattern DO
  965.    Pos := pPos;
  966.    Tempo := NoIdent;
  967.    TypeDesc := NoTree;
  968.    Path := NoTree;
  969.   END;
  970.   RETURN yyt;
  971.  END mPattern;
  972.  
  973. PROCEDURE mDecompose (pPos: tPosition; pSelector: tIdent; pExpr: tTree; pPatterns: tTree; pWiden: BOOLEAN): tTree;
  974.  VAR yyByteCount    : LONGINT;
  975.  VAR yyt    : tTree;
  976.  BEGIN
  977.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Decompose]);
  978.   yyt^.yyHead.yyMark := 0;
  979.   yyt^.Kind := Decompose;
  980.   WITH yyt^.Decompose DO
  981.    Pos := pPos;
  982.    Tempo := NoIdent;
  983.    TypeDesc := NoTree;
  984.    Path := NoTree;
  985.    Selector := pSelector;
  986.    Expr := pExpr;
  987.    Patterns := pPatterns;
  988.    Widen := pWiden;
  989.    
  990.   END;
  991.   RETURN yyt;
  992.  END mDecompose;
  993.  
  994. PROCEDURE mVarDef (pPos: tPosition; pName: tIdent): tTree;
  995.  VAR yyByteCount    : LONGINT;
  996.  VAR yyt    : tTree;
  997.  BEGIN
  998.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [VarDef]);
  999.   yyt^.yyHead.yyMark := 0;
  1000.   yyt^.Kind := VarDef;
  1001.   WITH yyt^.VarDef DO
  1002.    Pos := pPos;
  1003.    Tempo := NoIdent;
  1004.    TypeDesc := NoTree;
  1005.    Path := NoTree;
  1006.    Name := pName;
  1007.    
  1008.   END;
  1009.   RETURN yyt;
  1010.  END mVarDef;
  1011.  
  1012. PROCEDURE mNilTest (pPos: tPosition; pSelector: tIdent): tTree;
  1013.  VAR yyByteCount    : LONGINT;
  1014.  VAR yyt    : tTree;
  1015.  BEGIN
  1016.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NilTest]);
  1017.   yyt^.yyHead.yyMark := 0;
  1018.   yyt^.Kind := NilTest;
  1019.   WITH yyt^.NilTest DO
  1020.    Pos := pPos;
  1021.    Tempo := NoIdent;
  1022.    TypeDesc := NoTree;
  1023.    Path := NoTree;
  1024.    Selector := pSelector;
  1025.   END;
  1026.   RETURN yyt;
  1027.  END mNilTest;
  1028.  
  1029. PROCEDURE mDontCare1 (pPos: tPosition): tTree;
  1030.  VAR yyByteCount    : LONGINT;
  1031.  VAR yyt    : tTree;
  1032.  BEGIN
  1033.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [DontCare1]);
  1034.   yyt^.yyHead.yyMark := 0;
  1035.   yyt^.Kind := DontCare1;
  1036.   WITH yyt^.DontCare1 DO
  1037.    Pos := pPos;
  1038.    Tempo := NoIdent;
  1039.    TypeDesc := NoTree;
  1040.    Path := NoTree;
  1041.   END;
  1042.   RETURN yyt;
  1043.  END mDontCare1;
  1044.  
  1045. PROCEDURE mDontCare (pPos: tPosition): tTree;
  1046.  VAR yyByteCount    : LONGINT;
  1047.  VAR yyt    : tTree;
  1048.  BEGIN
  1049.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [DontCare]);
  1050.   yyt^.yyHead.yyMark := 0;
  1051.   yyt^.Kind := DontCare;
  1052.   WITH yyt^.DontCare DO
  1053.    Pos := pPos;
  1054.    Tempo := NoIdent;
  1055.    TypeDesc := NoTree;
  1056.    Path := NoTree;
  1057.    Tempos := NoTree;
  1058.   END;
  1059.   RETURN yyt;
  1060.  END mDontCare;
  1061.  
  1062. PROCEDURE mValue (pPos: tPosition; pExpr: tTree): tTree;
  1063.  VAR yyByteCount    : LONGINT;
  1064.  VAR yyt    : tTree;
  1065.  BEGIN
  1066.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Value]);
  1067.   yyt^.yyHead.yyMark := 0;
  1068.   yyt^.Kind := Value;
  1069.   WITH yyt^.Value DO
  1070.    Pos := pPos;
  1071.    Tempo := NoIdent;
  1072.    TypeDesc := NoTree;
  1073.    Path := NoTree;
  1074.    Expr := pExpr;
  1075.   END;
  1076.   RETURN yyt;
  1077.  END mValue;
  1078.  
  1079. PROCEDURE mExprs (): tTree;
  1080.  VAR yyByteCount    : LONGINT;
  1081.  VAR yyt    : tTree;
  1082.  BEGIN
  1083.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Exprs]);
  1084.   yyt^.yyHead.yyMark := 0;
  1085.   yyt^.Kind := Exprs;
  1086.   RETURN yyt;
  1087.  END mExprs;
  1088.  
  1089. PROCEDURE mNoExpr (pPos: tPosition): tTree;
  1090.  VAR yyByteCount    : LONGINT;
  1091.  VAR yyt    : tTree;
  1092.  BEGIN
  1093.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoExpr]);
  1094.   yyt^.yyHead.yyMark := 0;
  1095.   yyt^.Kind := NoExpr;
  1096.   WITH yyt^.NoExpr DO
  1097.    Pos := pPos;
  1098.   END;
  1099.   RETURN yyt;
  1100.  END mNoExpr;
  1101.  
  1102. PROCEDURE mOneExpr (pExpr: tTree; pNext: tTree): tTree;
  1103.  VAR yyByteCount    : LONGINT;
  1104.  VAR yyt    : tTree;
  1105.  BEGIN
  1106.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [OneExpr]);
  1107.   yyt^.yyHead.yyMark := 0;
  1108.   yyt^.Kind := OneExpr;
  1109.   WITH yyt^.OneExpr DO
  1110.    Expr := pExpr;
  1111.    Next := pNext;
  1112.   END;
  1113.   RETURN yyt;
  1114.  END mOneExpr;
  1115.  
  1116. PROCEDURE mNamedExpr (pExpr: tTree; pNext: tTree; pName: tIdent): tTree;
  1117.  VAR yyByteCount    : LONGINT;
  1118.  VAR yyt    : tTree;
  1119.  BEGIN
  1120.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NamedExpr]);
  1121.   yyt^.yyHead.yyMark := 0;
  1122.   yyt^.Kind := NamedExpr;
  1123.   WITH yyt^.NamedExpr DO
  1124.    Expr := pExpr;
  1125.    Next := pNext;
  1126.    Name := pName;
  1127.   END;
  1128.   RETURN yyt;
  1129.  END mNamedExpr;
  1130.  
  1131. PROCEDURE mExpr (pPos: tPosition): tTree;
  1132.  VAR yyByteCount    : LONGINT;
  1133.  VAR yyt    : tTree;
  1134.  BEGIN
  1135.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Expr]);
  1136.   yyt^.yyHead.yyMark := 0;
  1137.   yyt^.Kind := Expr;
  1138.   WITH yyt^.Expr DO
  1139.    Pos := pPos;
  1140.   END;
  1141.   RETURN yyt;
  1142.  END mExpr;
  1143.  
  1144. PROCEDURE mCompose (pPos: tPosition; pSelector: tIdent; pExpr: tTree; pExprs: tTree; pWiden: BOOLEAN): tTree;
  1145.  VAR yyByteCount    : LONGINT;
  1146.  VAR yyt    : tTree;
  1147.  BEGIN
  1148.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Compose]);
  1149.   yyt^.yyHead.yyMark := 0;
  1150.   yyt^.Kind := Compose;
  1151.   WITH yyt^.Compose DO
  1152.    Pos := pPos;
  1153.    Selector := pSelector;
  1154.    Expr := pExpr;
  1155.    Exprs := pExprs;
  1156.    Widen := pWiden;
  1157.    
  1158.    Tempo := NoIdent;
  1159.    TypeDesc := NoTree;
  1160.   END;
  1161.   RETURN yyt;
  1162.  END mCompose;
  1163.  
  1164. PROCEDURE mVarUse (pPos: tPosition; pName: tIdent): tTree;
  1165.  VAR yyByteCount    : LONGINT;
  1166.  VAR yyt    : tTree;
  1167.  BEGIN
  1168.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [VarUse]);
  1169.   yyt^.yyHead.yyMark := 0;
  1170.   yyt^.Kind := VarUse;
  1171.   WITH yyt^.VarUse DO
  1172.    Pos := pPos;
  1173.    Name := pName;
  1174.    
  1175.   END;
  1176.   RETURN yyt;
  1177.  END mVarUse;
  1178.  
  1179. PROCEDURE mAttrDesc (pPos: tPosition; pName: tIdent; pAttribute: tIdent): tTree;
  1180.  VAR yyByteCount    : LONGINT;
  1181.  VAR yyt    : tTree;
  1182.  BEGIN
  1183.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [AttrDesc]);
  1184.   yyt^.yyHead.yyMark := 0;
  1185.   yyt^.Kind := AttrDesc;
  1186.   WITH yyt^.AttrDesc DO
  1187.    Pos := pPos;
  1188.    Name := pName;
  1189.    
  1190.    Attribute := pAttribute;
  1191.    Type := NoIdent;
  1192.   END;
  1193.   RETURN yyt;
  1194.  END mAttrDesc;
  1195.  
  1196. PROCEDURE mNil (pPos: tPosition; pSelector: tIdent): tTree;
  1197.  VAR yyByteCount    : LONGINT;
  1198.  VAR yyt    : tTree;
  1199.  BEGIN
  1200.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Nil]);
  1201.   yyt^.yyHead.yyMark := 0;
  1202.   yyt^.Kind := Nil;
  1203.   WITH yyt^.Nil DO
  1204.    Pos := pPos;
  1205.    Selector := pSelector;
  1206.   END;
  1207.   RETURN yyt;
  1208.  END mNil;
  1209.  
  1210. PROCEDURE mCall (pPos: tPosition; pExpr: tTree; pExprs: tTree; pPatterns: tTree): tTree;
  1211.  VAR yyByteCount    : LONGINT;
  1212.  VAR yyt    : tTree;
  1213.  BEGIN
  1214.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Call]);
  1215.   yyt^.yyHead.yyMark := 0;
  1216.   yyt^.Kind := Call;
  1217.   WITH yyt^.Call DO
  1218.    Pos := pPos;
  1219.    Expr := pExpr;
  1220.    Exprs := pExprs;
  1221.    Patterns := pPatterns;
  1222.    
  1223.   END;
  1224.   RETURN yyt;
  1225.  END mCall;
  1226.  
  1227. PROCEDURE mBinary (pPos: tPosition; pLop: tTree; pOperator: tIdent; pRop: tTree): tTree;
  1228.  VAR yyByteCount    : LONGINT;
  1229.  VAR yyt    : tTree;
  1230.  BEGIN
  1231.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Binary]);
  1232.   yyt^.yyHead.yyMark := 0;
  1233.   yyt^.Kind := Binary;
  1234.   WITH yyt^.Binary DO
  1235.    Pos := pPos;
  1236.    Lop := pLop;
  1237.    Operator := pOperator;
  1238.    Rop := pRop;
  1239.   END;
  1240.   RETURN yyt;
  1241.  END mBinary;
  1242.  
  1243. PROCEDURE mPreOperator (pPos: tPosition; pOperator: tIdent; pExpr: tTree): tTree;
  1244.  VAR yyByteCount    : LONGINT;
  1245.  VAR yyt    : tTree;
  1246.  BEGIN
  1247.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [PreOperator]);
  1248.   yyt^.yyHead.yyMark := 0;
  1249.   yyt^.Kind := PreOperator;
  1250.   WITH yyt^.PreOperator DO
  1251.    Pos := pPos;
  1252.    Operator := pOperator;
  1253.    Expr := pExpr;
  1254.   END;
  1255.   RETURN yyt;
  1256.  END mPreOperator;
  1257.  
  1258. PROCEDURE mPostOperator (pPos: tPosition; pOperator: tIdent; pExpr: tTree): tTree;
  1259.  VAR yyByteCount    : LONGINT;
  1260.  VAR yyt    : tTree;
  1261.  BEGIN
  1262.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [PostOperator]);
  1263.   yyt^.yyHead.yyMark := 0;
  1264.   yyt^.Kind := PostOperator;
  1265.   WITH yyt^.PostOperator DO
  1266.    Pos := pPos;
  1267.    Operator := pOperator;
  1268.    Expr := pExpr;
  1269.   END;
  1270.   RETURN yyt;
  1271.  END mPostOperator;
  1272.  
  1273. PROCEDURE mIndex (pPos: tPosition; pExpr: tTree; pExprs: tTree): tTree;
  1274.  VAR yyByteCount    : LONGINT;
  1275.  VAR yyt    : tTree;
  1276.  BEGIN
  1277.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Index]);
  1278.   yyt^.yyHead.yyMark := 0;
  1279.   yyt^.Kind := Index;
  1280.   WITH yyt^.Index DO
  1281.    Pos := pPos;
  1282.    Expr := pExpr;
  1283.    Exprs := pExprs;
  1284.   END;
  1285.   RETURN yyt;
  1286.  END mIndex;
  1287.  
  1288. PROCEDURE mParents (pPos: tPosition; pExpr: tTree): tTree;
  1289.  VAR yyByteCount    : LONGINT;
  1290.  VAR yyt    : tTree;
  1291.  BEGIN
  1292.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Parents]);
  1293.   yyt^.yyHead.yyMark := 0;
  1294.   yyt^.Kind := Parents;
  1295.   WITH yyt^.Parents DO
  1296.    Pos := pPos;
  1297.    Expr := pExpr;
  1298.   END;
  1299.   RETURN yyt;
  1300.  END mParents;
  1301.  
  1302. PROCEDURE mTargetExpr (pPos: tPosition; pExpr: tTree): tTree;
  1303.  VAR yyByteCount    : LONGINT;
  1304.  VAR yyt    : tTree;
  1305.  BEGIN
  1306.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [TargetExpr]);
  1307.   yyt^.yyHead.yyMark := 0;
  1308.   yyt^.Kind := TargetExpr;
  1309.   WITH yyt^.TargetExpr DO
  1310.    Pos := pPos;
  1311.    Expr := pExpr;
  1312.    
  1313.   END;
  1314.   RETURN yyt;
  1315.  END mTargetExpr;
  1316.  
  1317. PROCEDURE mStringExpr (pPos: tPosition; pString: tStringRef): tTree;
  1318.  VAR yyByteCount    : LONGINT;
  1319.  VAR yyt    : tTree;
  1320.  BEGIN
  1321.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [StringExpr]);
  1322.   yyt^.yyHead.yyMark := 0;
  1323.   yyt^.Kind := StringExpr;
  1324.   WITH yyt^.StringExpr DO
  1325.    Pos := pPos;
  1326.    String := pString;
  1327.   END;
  1328.   RETURN yyt;
  1329.  END mStringExpr;
  1330.  
  1331. PROCEDURE mStatements (): tTree;
  1332.  VAR yyByteCount    : LONGINT;
  1333.  VAR yyt    : tTree;
  1334.  BEGIN
  1335.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Statements]);
  1336.   yyt^.yyHead.yyMark := 0;
  1337.   yyt^.Kind := Statements;
  1338.   RETURN yyt;
  1339.  END mStatements;
  1340.  
  1341. PROCEDURE mNoStatement (): tTree;
  1342.  VAR yyByteCount    : LONGINT;
  1343.  VAR yyt    : tTree;
  1344.  BEGIN
  1345.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoStatement]);
  1346.   yyt^.yyHead.yyMark := 0;
  1347.   yyt^.Kind := NoStatement;
  1348.   RETURN yyt;
  1349.  END mNoStatement;
  1350.  
  1351. PROCEDURE mStatement (pPos: tPosition; pNext: tTree): tTree;
  1352.  VAR yyByteCount    : LONGINT;
  1353.  VAR yyt    : tTree;
  1354.  BEGIN
  1355.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Statement]);
  1356.   yyt^.yyHead.yyMark := 0;
  1357.   yyt^.Kind := Statement;
  1358.   WITH yyt^.Statement DO
  1359.    Pos := pPos;
  1360.    Next := pNext;
  1361.   END;
  1362.   RETURN yyt;
  1363.  END mStatement;
  1364.  
  1365. PROCEDURE mProcCall (pPos: tPosition; pNext: tTree; pCall: tTree): tTree;
  1366.  VAR yyByteCount    : LONGINT;
  1367.  VAR yyt    : tTree;
  1368.  BEGIN
  1369.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [ProcCall]);
  1370.   yyt^.yyHead.yyMark := 0;
  1371.   yyt^.Kind := ProcCall;
  1372.   WITH yyt^.ProcCall DO
  1373.    Pos := pPos;
  1374.    Next := pNext;
  1375.    Call := pCall;
  1376.   END;
  1377.   RETURN yyt;
  1378.  END mProcCall;
  1379.  
  1380. PROCEDURE mCondition (pPos: tPosition; pNext: tTree; pExpr: tTree): tTree;
  1381.  VAR yyByteCount    : LONGINT;
  1382.  VAR yyt    : tTree;
  1383.  BEGIN
  1384.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Condition]);
  1385.   yyt^.yyHead.yyMark := 0;
  1386.   yyt^.Kind := Condition;
  1387.   WITH yyt^.Condition DO
  1388.    Pos := pPos;
  1389.    Next := pNext;
  1390.    Expr := pExpr;
  1391.   END;
  1392.   RETURN yyt;
  1393.  END mCondition;
  1394.  
  1395. PROCEDURE mAssignment (pPos: tPosition; pNext: tTree; pAdr: tTree; pExpr: tTree): tTree;
  1396.  VAR yyByteCount    : LONGINT;
  1397.  VAR yyt    : tTree;
  1398.  BEGIN
  1399.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Assignment]);
  1400.   yyt^.yyHead.yyMark := 0;
  1401.   yyt^.Kind := Assignment;
  1402.   WITH yyt^.Assignment DO
  1403.    Pos := pPos;
  1404.    Next := pNext;
  1405.    Adr := pAdr;
  1406.    Expr := pExpr;
  1407.    
  1408.   END;
  1409.   RETURN yyt;
  1410.  END mAssignment;
  1411.  
  1412. PROCEDURE mReject (pPos: tPosition; pNext: tTree): tTree;
  1413.  VAR yyByteCount    : LONGINT;
  1414.  VAR yyt    : tTree;
  1415.  BEGIN
  1416.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Reject]);
  1417.   yyt^.yyHead.yyMark := 0;
  1418.   yyt^.Kind := Reject;
  1419.   WITH yyt^.Reject DO
  1420.    Pos := pPos;
  1421.    Next := pNext;
  1422.   END;
  1423.   RETURN yyt;
  1424.  END mReject;
  1425.  
  1426. PROCEDURE mFail (pPos: tPosition; pNext: tTree): tTree;
  1427.  VAR yyByteCount    : LONGINT;
  1428.  VAR yyt    : tTree;
  1429.  BEGIN
  1430.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Fail]);
  1431.   yyt^.yyHead.yyMark := 0;
  1432.   yyt^.Kind := Fail;
  1433.   WITH yyt^.Fail DO
  1434.    Pos := pPos;
  1435.    Next := pNext;
  1436.   END;
  1437.   RETURN yyt;
  1438.  END mFail;
  1439.  
  1440. PROCEDURE mTargetStmt (pPos: tPosition; pNext: tTree; pParameters: tTree; pStmt: tTree): tTree;
  1441.  VAR yyByteCount    : LONGINT;
  1442.  VAR yyt    : tTree;
  1443.  BEGIN
  1444.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [TargetStmt]);
  1445.   yyt^.yyHead.yyMark := 0;
  1446.   yyt^.Kind := TargetStmt;
  1447.   WITH yyt^.TargetStmt DO
  1448.    Pos := pPos;
  1449.    Next := pNext;
  1450.    Parameters := pParameters;
  1451.    Stmt := pStmt;
  1452.    
  1453.   END;
  1454.   RETURN yyt;
  1455.  END mTargetStmt;
  1456.  
  1457. PROCEDURE mNl (pPos: tPosition; pNext: tTree): tTree;
  1458.  VAR yyByteCount    : LONGINT;
  1459.  VAR yyt    : tTree;
  1460.  BEGIN
  1461.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Nl]);
  1462.   yyt^.yyHead.yyMark := 0;
  1463.   yyt^.Kind := Nl;
  1464.   WITH yyt^.Nl DO
  1465.    Pos := pPos;
  1466.    Next := pNext;
  1467.   END;
  1468.   RETURN yyt;
  1469.  END mNl;
  1470.  
  1471. PROCEDURE mWriteStr (pPos: tPosition; pNext: tTree; pString: tStringRef): tTree;
  1472.  VAR yyByteCount    : LONGINT;
  1473.  VAR yyt    : tTree;
  1474.  BEGIN
  1475.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [WriteStr]);
  1476.   yyt^.yyHead.yyMark := 0;
  1477.   yyt^.Kind := WriteStr;
  1478.   WITH yyt^.WriteStr DO
  1479.    Pos := pPos;
  1480.    Next := pNext;
  1481.    String := pString;
  1482.   END;
  1483.   RETURN yyt;
  1484.  END mWriteStr;
  1485.  
  1486. PROCEDURE mFormals (): tTree;
  1487.  VAR yyByteCount    : LONGINT;
  1488.  VAR yyt    : tTree;
  1489.  BEGIN
  1490.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Formals]);
  1491.   yyt^.yyHead.yyMark := 0;
  1492.   yyt^.Kind := Formals;
  1493.   RETURN yyt;
  1494.  END mFormals;
  1495.  
  1496. PROCEDURE mNoFormal (): tTree;
  1497.  VAR yyByteCount    : LONGINT;
  1498.  VAR yyt    : tTree;
  1499.  BEGIN
  1500.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoFormal]);
  1501.   yyt^.yyHead.yyMark := 0;
  1502.   yyt^.Kind := NoFormal;
  1503.   RETURN yyt;
  1504.  END mNoFormal;
  1505.  
  1506. PROCEDURE mFormal (pNext: tTree; pName: tIdent; pTypeDesc: tTree; pPath: tTree): tTree;
  1507.  VAR yyByteCount    : LONGINT;
  1508.  VAR yyt    : tTree;
  1509.  BEGIN
  1510.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Formal]);
  1511.   yyt^.yyHead.yyMark := 0;
  1512.   yyt^.Kind := Formal;
  1513.   WITH yyt^.Formal DO
  1514.    Next := pNext;
  1515.    Name := pName;
  1516.    TypeDesc := pTypeDesc;
  1517.    Path := pPath;
  1518.   END;
  1519.   RETURN yyt;
  1520.  END mFormal;
  1521.  
  1522. PROCEDURE mDummyFormal (pNext: tTree): tTree;
  1523.  VAR yyByteCount    : LONGINT;
  1524.  VAR yyt    : tTree;
  1525.  BEGIN
  1526.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [DummyFormal]);
  1527.   yyt^.yyHead.yyMark := 0;
  1528.   yyt^.Kind := DummyFormal;
  1529.   WITH yyt^.DummyFormal DO
  1530.    Next := pNext;
  1531.   END;
  1532.   RETURN yyt;
  1533.  END mDummyFormal;
  1534.  
  1535. PROCEDURE mTypeDesc (): tTree;
  1536.  VAR yyByteCount    : LONGINT;
  1537.  VAR yyt    : tTree;
  1538.  BEGIN
  1539.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [TypeDesc]);
  1540.   yyt^.yyHead.yyMark := 0;
  1541.   yyt^.Kind := TypeDesc;
  1542.   RETURN yyt;
  1543.  END mTypeDesc;
  1544.  
  1545. PROCEDURE mNodeTypes (pTreeName: tTree; pTypes: tSet): tTree;
  1546.  VAR yyByteCount    : LONGINT;
  1547.  VAR yyt    : tTree;
  1548.  BEGIN
  1549.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NodeTypes]);
  1550.   yyt^.yyHead.yyMark := 0;
  1551.   yyt^.Kind := NodeTypes;
  1552.   WITH yyt^.NodeTypes DO
  1553.    TreeName := pTreeName;
  1554.    Types := pTypes;
  1555.   END;
  1556.   RETURN yyt;
  1557.  END mNodeTypes;
  1558.  
  1559. PROCEDURE mUserType (pType: tIdent): tTree;
  1560.  VAR yyByteCount    : LONGINT;
  1561.  VAR yyt    : tTree;
  1562.  BEGIN
  1563.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [UserType]);
  1564.   yyt^.yyHead.yyMark := 0;
  1565.   yyt^.Kind := UserType;
  1566.   WITH yyt^.UserType DO
  1567.    Type := pType;
  1568.   END;
  1569.   RETURN yyt;
  1570.  END mUserType;
  1571.  
  1572. PROCEDURE mPath (): tTree;
  1573.  VAR yyByteCount    : LONGINT;
  1574.  VAR yyt    : tTree;
  1575.  BEGIN
  1576.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Path]);
  1577.   yyt^.yyHead.yyMark := 0;
  1578.   yyt^.Kind := Path;
  1579.   RETURN yyt;
  1580.  END mPath;
  1581.  
  1582. PROCEDURE mVar (pName: tIdent; pIsOutput: BOOLEAN; pIsRegister: BOOLEAN): tTree;
  1583.  VAR yyByteCount    : LONGINT;
  1584.  VAR yyt    : tTree;
  1585.  BEGIN
  1586.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Var]);
  1587.   yyt^.yyHead.yyMark := 0;
  1588.   yyt^.Kind := Var;
  1589.   WITH yyt^.Var DO
  1590.    Name := pName;
  1591.    IsOutput := pIsOutput;
  1592.    IsRegister := pIsRegister;
  1593.   END;
  1594.   RETURN yyt;
  1595.  END mVar;
  1596.  
  1597. PROCEDURE mConsType (pNext: tTree; pName: tIdent): tTree;
  1598.  VAR yyByteCount    : LONGINT;
  1599.  VAR yyt    : tTree;
  1600.  BEGIN
  1601.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [ConsType]);
  1602.   yyt^.yyHead.yyMark := 0;
  1603.   yyt^.Kind := ConsType;
  1604.   WITH yyt^.ConsType DO
  1605.    Next := pNext;
  1606.    Name := pName;
  1607.   END;
  1608.   RETURN yyt;
  1609.  END mConsType;
  1610.  
  1611. PROCEDURE mField (pNext: tTree; pName: tIdent): tTree;
  1612.  VAR yyByteCount    : LONGINT;
  1613.  VAR yyt    : tTree;
  1614.  BEGIN
  1615.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Field]);
  1616.   yyt^.yyHead.yyMark := 0;
  1617.   yyt^.Kind := Field;
  1618.   WITH yyt^.Field DO
  1619.    Next := pNext;
  1620.    Name := pName;
  1621.   END;
  1622.   RETURN yyt;
  1623.  END mField;
  1624.  
  1625. PROCEDURE mTests (): tTree;
  1626.  VAR yyByteCount    : LONGINT;
  1627.  VAR yyt    : tTree;
  1628.  BEGIN
  1629.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Tests]);
  1630.   yyt^.yyHead.yyMark := 0;
  1631.   yyt^.Kind := Tests;
  1632.   RETURN yyt;
  1633.  END mTests;
  1634.  
  1635. PROCEDURE mNoTest (): tTree;
  1636.  VAR yyByteCount    : LONGINT;
  1637.  VAR yyt    : tTree;
  1638.  BEGIN
  1639.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoTest]);
  1640.   yyt^.yyHead.yyMark := 0;
  1641.   yyt^.Kind := NoTest;
  1642.   RETURN yyt;
  1643.  END mNoTest;
  1644.  
  1645. PROCEDURE mOneTest (pNext: tTree; pPath: tTree): tTree;
  1646.  VAR yyByteCount    : LONGINT;
  1647.  VAR yyt    : tTree;
  1648.  BEGIN
  1649.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [OneTest]);
  1650.   yyt^.yyHead.yyMark := 0;
  1651.   yyt^.Kind := OneTest;
  1652.   WITH yyt^.OneTest DO
  1653.    Next := pNext;
  1654.    Path := pPath;
  1655.   END;
  1656.   RETURN yyt;
  1657.  END mOneTest;
  1658.  
  1659. PROCEDURE mTestKind (pNext: tTree; pPath: tTree; pTypeDesc: tTree; pName: tIdent): tTree;
  1660.  VAR yyByteCount    : LONGINT;
  1661.  VAR yyt    : tTree;
  1662.  BEGIN
  1663.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [TestKind]);
  1664.   yyt^.yyHead.yyMark := 0;
  1665.   yyt^.Kind := TestKind;
  1666.   WITH yyt^.TestKind DO
  1667.    Next := pNext;
  1668.    Path := pPath;
  1669.    TypeDesc := pTypeDesc;
  1670.    Name := pName;
  1671.   END;
  1672.   RETURN yyt;
  1673.  END mTestKind;
  1674.  
  1675. PROCEDURE mTestIsType (pNext: tTree; pPath: tTree; pTypeDesc: tTree; pName: tIdent): tTree;
  1676.  VAR yyByteCount    : LONGINT;
  1677.  VAR yyt    : tTree;
  1678.  BEGIN
  1679.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [TestIsType]);
  1680.   yyt^.yyHead.yyMark := 0;
  1681.   yyt^.Kind := TestIsType;
  1682.   WITH yyt^.TestIsType DO
  1683.    Next := pNext;
  1684.    Path := pPath;
  1685.    TypeDesc := pTypeDesc;
  1686.    Name := pName;
  1687.   END;
  1688.   RETURN yyt;
  1689.  END mTestIsType;
  1690.  
  1691. PROCEDURE mTestNil (pNext: tTree; pPath: tTree): tTree;
  1692.  VAR yyByteCount    : LONGINT;
  1693.  VAR yyt    : tTree;
  1694.  BEGIN
  1695.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [TestNil]);
  1696.   yyt^.yyHead.yyMark := 0;
  1697.   yyt^.Kind := TestNil;
  1698.   WITH yyt^.TestNil DO
  1699.    Next := pNext;
  1700.    Path := pPath;
  1701.   END;
  1702.   RETURN yyt;
  1703.  END mTestNil;
  1704.  
  1705. PROCEDURE mTestNonlin (pNext: tTree; pPath: tTree; pPath2: tTree; pTypeDesc: tTree): tTree;
  1706.  VAR yyByteCount    : LONGINT;
  1707.  VAR yyt    : tTree;
  1708.  BEGIN
  1709.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [TestNonlin]);
  1710.   yyt^.yyHead.yyMark := 0;
  1711.   yyt^.Kind := TestNonlin;
  1712.   WITH yyt^.TestNonlin DO
  1713.    Next := pNext;
  1714.    Path := pPath;
  1715.    Path2 := pPath2;
  1716.    TypeDesc := pTypeDesc;
  1717.   END;
  1718.   RETURN yyt;
  1719.  END mTestNonlin;
  1720.  
  1721. PROCEDURE mTestValue (pNext: tTree; pPath: tTree; pExpr: tTree; pTypeDesc: tTree): tTree;
  1722.  VAR yyByteCount    : LONGINT;
  1723.  VAR yyt    : tTree;
  1724.  BEGIN
  1725.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [TestValue]);
  1726.   yyt^.yyHead.yyMark := 0;
  1727.   yyt^.Kind := TestValue;
  1728.   WITH yyt^.TestValue DO
  1729.    Next := pNext;
  1730.    Path := pPath;
  1731.    Expr := pExpr;
  1732.    TypeDesc := pTypeDesc;
  1733.   END;
  1734.   RETURN yyt;
  1735.  END mTestValue;
  1736.  
  1737. PROCEDURE mDecisions (): tTree;
  1738.  VAR yyByteCount    : LONGINT;
  1739.  VAR yyt    : tTree;
  1740.  BEGIN
  1741.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Decisions]);
  1742.   yyt^.yyHead.yyMark := 0;
  1743.   yyt^.Kind := Decisions;
  1744.   RETURN yyt;
  1745.  END mDecisions;
  1746.  
  1747. PROCEDURE mNoDecision (): tTree;
  1748.  VAR yyByteCount    : LONGINT;
  1749.  VAR yyt    : tTree;
  1750.  BEGIN
  1751.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [NoDecision]);
  1752.   yyt^.yyHead.yyMark := 0;
  1753.   yyt^.Kind := NoDecision;
  1754.   RETURN yyt;
  1755.  END mNoDecision;
  1756.  
  1757. PROCEDURE mDecision (pThen: tTree; pElse: tTree; pOneTest: tTree; pCases: SHORTCARD; pIsUnchanged: BOOLEAN): tTree;
  1758.  VAR yyByteCount    : LONGINT;
  1759.  VAR yyt    : tTree;
  1760.  BEGIN
  1761.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Decision]);
  1762.   yyt^.yyHead.yyMark := 0;
  1763.   yyt^.Kind := Decision;
  1764.   WITH yyt^.Decision DO
  1765.    Then := pThen;
  1766.    Else := pElse;
  1767.    OneTest := pOneTest;
  1768.    Cases := pCases;
  1769.    IsUnchanged := pIsUnchanged;
  1770.   END;
  1771.   RETURN yyt;
  1772.  END mDecision;
  1773.  
  1774. PROCEDURE mDecided (pElse: tTree; pRule: tTree): tTree;
  1775.  VAR yyByteCount    : LONGINT;
  1776.  VAR yyt    : tTree;
  1777.  BEGIN
  1778.   yyt := yyPoolFreePtr; IF SYSTEM.ADDRESS (yyt) >= yyPoolMaxPtr THEN yyt := yyAlloc (); END; INC (yyPoolFreePtr,  yyNodeSize [Decided]);
  1779.   yyt^.yyHead.yyMark := 0;
  1780.   yyt^.Kind := Decided;
  1781.   WITH yyt^.Decided DO
  1782.    Else := pElse;
  1783.    Rule := pRule;
  1784.   END;
  1785.   RETURN yyt;
  1786.  END mDecided;
  1787.  
  1788. TYPE yyPtrtTree    = POINTER TO tTree;
  1789.  
  1790. VAR yyf    : IO.tFile;
  1791. VAR yyLabel    : SHORTCARD;
  1792. VAR yyKind    : SHORTCARD;
  1793. VAR yyc    : CHAR;
  1794. VAR yys    : Strings.tString;
  1795.  
  1796. PROCEDURE yyMark (yyt: tTree);
  1797.  BEGIN
  1798.   LOOP
  1799.    IF yyt = NoTree THEN RETURN; END;
  1800.    INC (yyt^.yyHead.yyMark);
  1801.    IF yyt^.yyHead.yyMark > 1 THEN RETURN; END;
  1802.  
  1803.    CASE yyt^.Kind OF
  1804. | Class:
  1805. yyMark (yyt^.Class.Attributes);
  1806. yyMark (yyt^.Class.Extensions);
  1807. yyMark (yyt^.Class.BaseClass);
  1808. yyMark (yyt^.Class.Formals);
  1809. yyMark (yyt^.Class.TypeDesc);
  1810. yyt := yyt^.Class.Next;
  1811. | AttrOrAction:
  1812. yyt := yyt^.AttrOrAction.Next;
  1813. | Child:
  1814. yyt := yyt^.Child.Next;
  1815. | Attribute:
  1816. yyt := yyt^.Attribute.Next;
  1817. | ActionPart:
  1818. yyt := yyt^.ActionPart.Next;
  1819. | Designator:
  1820. yyt := yyt^.Designator.Next;
  1821. | Ident:
  1822. yyt := yyt^.Ident.Next;
  1823. | Remote:
  1824. yyMark (yyt^.Remote.Designators);
  1825. yyt := yyt^.Remote.Next;
  1826. | Any:
  1827. yyt := yyt^.Any.Next;
  1828. | Anys:
  1829. yyMark (yyt^.Anys.Layouts);
  1830. yyt := yyt^.Anys.Next;
  1831. | LayoutAny:
  1832. yyt := yyt^.LayoutAny.Next;
  1833. | Name:
  1834. yyt := yyt^.Name.Next;
  1835. | Spec:
  1836. yyMark (yyt^.Spec.TreeNames);
  1837. yyMark (yyt^.Spec.Public);
  1838. yyMark (yyt^.Spec.Extern);
  1839. yyMark (yyt^.Spec.Codes);
  1840. yyt := yyt^.Spec.Routines;
  1841. | TreeName:
  1842. yyMark (yyt^.TreeName.Classes);
  1843. yyt := yyt^.TreeName.Next;
  1844. | Routine:
  1845. yyMark (yyt^.Routine.InParams);
  1846. yyMark (yyt^.Routine.OutParams);
  1847. yyMark (yyt^.Routine.Extern);
  1848. yyMark (yyt^.Routine.Rules);
  1849. yyMark (yyt^.Routine.InForm);
  1850. yyMark (yyt^.Routine.OutForm);
  1851. yyMark (yyt^.Routine.ParamDecls);
  1852. yyMark (yyt^.Routine.Decisions);
  1853. yyt := yyt^.Routine.Next;
  1854. | Procedure:
  1855. yyMark (yyt^.Procedure.InParams);
  1856. yyMark (yyt^.Procedure.OutParams);
  1857. yyMark (yyt^.Procedure.Extern);
  1858. yyMark (yyt^.Procedure.Rules);
  1859. yyMark (yyt^.Procedure.InForm);
  1860. yyMark (yyt^.Procedure.OutForm);
  1861. yyMark (yyt^.Procedure.ParamDecls);
  1862. yyMark (yyt^.Procedure.Decisions);
  1863. yyt := yyt^.Procedure.Next;
  1864. | Function:
  1865. yyMark (yyt^.Function.InParams);
  1866. yyMark (yyt^.Function.OutParams);
  1867. yyMark (yyt^.Function.Extern);
  1868. yyMark (yyt^.Function.Rules);
  1869. yyMark (yyt^.Function.InForm);
  1870. yyMark (yyt^.Function.OutForm);
  1871. yyMark (yyt^.Function.ParamDecls);
  1872. yyMark (yyt^.Function.Decisions);
  1873. yyMark (yyt^.Function.ReturnParams);
  1874. yyMark (yyt^.Function.ReturnForm);
  1875. yyt := yyt^.Function.Next;
  1876. | Predicate:
  1877. yyMark (yyt^.Predicate.InParams);
  1878. yyMark (yyt^.Predicate.OutParams);
  1879. yyMark (yyt^.Predicate.Extern);
  1880. yyMark (yyt^.Predicate.Rules);
  1881. yyMark (yyt^.Predicate.InForm);
  1882. yyMark (yyt^.Predicate.OutForm);
  1883. yyMark (yyt^.Predicate.ParamDecls);
  1884. yyMark (yyt^.Predicate.Decisions);
  1885. yyt := yyt^.Predicate.Next;
  1886. | Param:
  1887. yyMark (yyt^.Param.Type);
  1888. yyt := yyt^.Param.Next;
  1889. | Type:
  1890. yyt := yyt^.Type.Names;
  1891. | Rule:
  1892. yyMark (yyt^.Rule.Patterns);
  1893. yyMark (yyt^.Rule.Exprs);
  1894. yyMark (yyt^.Rule.Expr);
  1895. yyMark (yyt^.Rule.Statements);
  1896. yyMark (yyt^.Rule.VarDecls);
  1897. yyMark (yyt^.Rule.Tests);
  1898. yyt := yyt^.Rule.Next;
  1899. | OnePattern:
  1900. yyMark (yyt^.OnePattern.Pattern);
  1901. yyt := yyt^.OnePattern.Next;
  1902. | OnePatternsList:
  1903. yyMark (yyt^.OnePatternsList.Patterns);
  1904. yyt := yyt^.OnePatternsList.Next;
  1905. | Pattern:
  1906. yyMark (yyt^.Pattern.TypeDesc);
  1907. yyt := yyt^.Pattern.Path;
  1908. | Decompose:
  1909. yyMark (yyt^.Decompose.TypeDesc);
  1910. yyMark (yyt^.Decompose.Path);
  1911. yyMark (yyt^.Decompose.Expr);
  1912. yyt := yyt^.Decompose.Patterns;
  1913. | VarDef:
  1914. yyMark (yyt^.VarDef.TypeDesc);
  1915. yyt := yyt^.VarDef.Path;
  1916. | NilTest:
  1917. yyMark (yyt^.NilTest.TypeDesc);
  1918. yyt := yyt^.NilTest.Path;
  1919. | DontCare1:
  1920. yyMark (yyt^.DontCare1.TypeDesc);
  1921. yyt := yyt^.DontCare1.Path;
  1922. | DontCare:
  1923. yyMark (yyt^.DontCare.TypeDesc);
  1924. yyMark (yyt^.DontCare.Path);
  1925. yyt := yyt^.DontCare.Tempos;
  1926. | Value:
  1927. yyMark (yyt^.Value.TypeDesc);
  1928. yyMark (yyt^.Value.Path);
  1929. yyt := yyt^.Value.Expr;
  1930. | OneExpr:
  1931. yyMark (yyt^.OneExpr.Expr);
  1932. yyt := yyt^.OneExpr.Next;
  1933. | NamedExpr:
  1934. yyMark (yyt^.NamedExpr.Expr);
  1935. yyt := yyt^.NamedExpr.Next;
  1936. | Compose:
  1937. yyMark (yyt^.Compose.Expr);
  1938. yyMark (yyt^.Compose.Exprs);
  1939. yyt := yyt^.Compose.TypeDesc;
  1940. | Call:
  1941. yyMark (yyt^.Call.Expr);
  1942. yyMark (yyt^.Call.Exprs);
  1943. yyt := yyt^.Call.Patterns;
  1944. | Binary:
  1945. yyMark (yyt^.Binary.Lop);
  1946. yyt := yyt^.Binary.Rop;
  1947. | PreOperator:
  1948. yyt := yyt^.PreOperator.Expr;
  1949. | PostOperator:
  1950. yyt := yyt^.PostOperator.Expr;
  1951. | Index:
  1952. yyMark (yyt^.Index.Expr);
  1953. yyt := yyt^.Index.Exprs;
  1954. | Parents:
  1955. yyt := yyt^.Parents.Expr;
  1956. | TargetExpr:
  1957. yyt := yyt^.TargetExpr.Expr;
  1958. | Statement:
  1959. yyt := yyt^.Statement.Next;
  1960. | ProcCall:
  1961. yyMark (yyt^.ProcCall.Call);
  1962. yyt := yyt^.ProcCall.Next;
  1963. | Condition:
  1964. yyMark (yyt^.Condition.Expr);
  1965. yyt := yyt^.Condition.Next;
  1966. | Assignment:
  1967. yyMark (yyt^.Assignment.Adr);
  1968. yyMark (yyt^.Assignment.Expr);
  1969. yyt := yyt^.Assignment.Next;
  1970. | Reject:
  1971. yyt := yyt^.Reject.Next;
  1972. | Fail:
  1973. yyt := yyt^.Fail.Next;
  1974. | TargetStmt:
  1975. yyMark (yyt^.TargetStmt.Parameters);
  1976. yyMark (yyt^.TargetStmt.Stmt);
  1977. yyt := yyt^.TargetStmt.Next;
  1978. | Nl:
  1979. yyt := yyt^.Nl.Next;
  1980. | WriteStr:
  1981. yyt := yyt^.WriteStr.Next;
  1982. | Formal:
  1983. yyMark (yyt^.Formal.TypeDesc);
  1984. yyMark (yyt^.Formal.Path);
  1985. yyt := yyt^.Formal.Next;
  1986. | DummyFormal:
  1987. yyt := yyt^.DummyFormal.Next;
  1988. | NodeTypes:
  1989. yyt := yyt^.NodeTypes.TreeName;
  1990. | ConsType:
  1991. yyt := yyt^.ConsType.Next;
  1992. | Field:
  1993. yyt := yyt^.Field.Next;
  1994. | OneTest:
  1995. yyMark (yyt^.OneTest.Next);
  1996. yyt := yyt^.OneTest.Path;
  1997. | TestKind:
  1998. yyMark (yyt^.TestKind.Next);
  1999. yyMark (yyt^.TestKind.Path);
  2000. yyt := yyt^.TestKind.TypeDesc;
  2001. | TestIsType:
  2002. yyMark (yyt^.TestIsType.Next);
  2003. yyMark (yyt^.TestIsType.Path);
  2004. yyt := yyt^.TestIsType.TypeDesc;
  2005. | TestNil:
  2006. yyMark (yyt^.TestNil.Next);
  2007. yyt := yyt^.TestNil.Path;
  2008. | TestNonlin:
  2009. yyMark (yyt^.TestNonlin.Next);
  2010. yyMark (yyt^.TestNonlin.Path);
  2011. yyMark (yyt^.TestNonlin.Path2);
  2012. yyt := yyt^.TestNonlin.TypeDesc;
  2013. | TestValue:
  2014. yyMark (yyt^.TestValue.Next);
  2015. yyMark (yyt^.TestValue.Path);
  2016. yyMark (yyt^.TestValue.Expr);
  2017. yyt := yyt^.TestValue.TypeDesc;
  2018. | Decision:
  2019. yyMark (yyt^.Decision.Then);
  2020. yyMark (yyt^.Decision.Else);
  2021. yyt := yyt^.Decision.OneTest;
  2022. | Decided:
  2023. yyMark (yyt^.Decided.Else);
  2024. yyt := yyt^.Decided.Rule;
  2025.    ELSE RETURN;
  2026.    END;
  2027.   END;
  2028.  END yyMark;
  2029.  
  2030. PROCEDURE yyWriteNl; BEGIN IO.WriteNl (yyf); END yyWriteNl;
  2031.  
  2032. PROCEDURE yyWriteSelector (yys: ARRAY OF CHAR);
  2033.  BEGIN IO.WriteS (yyf, yys); Layout.WriteSpaces (yyf, 15 - INTEGER (HIGH (yys))); IO.WriteS (yyf, ' = '); END yyWriteSelector;
  2034.  
  2035. PROCEDURE yyWriteHex (VAR yyx: ARRAY OF SYSTEM.BYTE);
  2036.  VAR yyi    : INTEGER;
  2037.  BEGIN
  2038.   FOR yyi := 0 TO INTEGER (HIGH (yyx)) DO
  2039.    IO.WriteN (yyf, ORD (CHAR (yyx [yyi])), 2, 16);
  2040.    IO.WriteC (yyf, ' ');
  2041.   END;
  2042.  END yyWriteHex;
  2043.  
  2044. PROCEDURE yyWriteAdr (yyt: tTree);
  2045.  BEGIN
  2046.   IF yyt = NoTree THEN
  2047.    IO.WriteS (yyf, 'NoTree');
  2048.   ELSE
  2049.    yyWriteHex (yyt);
  2050.   END;
  2051.   yyWriteNl;
  2052.  END yyWriteAdr;
  2053.  
  2054. PROCEDURE yWriteNodeClass (yyt: tTree);
  2055.  BEGIN
  2056.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.Class.Name); yyWriteNl;
  2057.   yyWriteSelector ('Properties'); yyWriteHex (yyt^.Class.Properties); yyWriteNl;
  2058.   yyWriteSelector ('Attributes'); yyWriteAdr (yyt^.Class.Attributes);
  2059.   yyWriteSelector ('Extensions'); yyWriteAdr (yyt^.Class.Extensions);
  2060.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Class.Next);
  2061.   yyWriteSelector ('BaseClass'); yyWriteAdr (yyt^.Class.BaseClass);
  2062.   yyWriteSelector ('Formals'); yyWriteAdr (yyt^.Class.Formals);
  2063.   yyWriteSelector ('TypeDesc'); yyWriteAdr (yyt^.Class.TypeDesc);
  2064.   yyWriteSelector ('Index'); IO.WriteI (yyf, yyt^.Class.Index, 0); yyWriteNl;
  2065.  END yWriteNodeClass;
  2066.  
  2067. PROCEDURE yWriteNodeAttrOrAction (yyt: tTree);
  2068.  BEGIN
  2069.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.AttrOrAction.Next);
  2070.  END yWriteNodeAttrOrAction;
  2071.  
  2072. PROCEDURE yWriteNodeChild (yyt: tTree);
  2073.  BEGIN
  2074.   yWriteNodeAttrOrAction (yyt); 
  2075.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.Child.Name); yyWriteNl;
  2076.   yyWriteSelector ('Type'); Idents.WriteIdent (yyf, yyt^.Child.Type); yyWriteNl;
  2077.   yyWriteSelector ('Properties'); yyWriteHex (yyt^.Child.Properties); yyWriteNl;
  2078.  END yWriteNodeChild;
  2079.  
  2080. PROCEDURE yWriteNodeAttribute (yyt: tTree);
  2081.  BEGIN
  2082.   yWriteNodeAttrOrAction (yyt); 
  2083.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.Attribute.Name); yyWriteNl;
  2084.   yyWriteSelector ('Type'); Idents.WriteIdent (yyf, yyt^.Attribute.Type); yyWriteNl;
  2085.   yyWriteSelector ('Properties'); yyWriteHex (yyt^.Attribute.Properties); yyWriteNl;
  2086.  END yWriteNodeAttribute;
  2087.  
  2088. PROCEDURE yWriteNodeActionPart (yyt: tTree);
  2089.  BEGIN
  2090.   yWriteNodeAttrOrAction (yyt); 
  2091.  END yWriteNodeActionPart;
  2092.  
  2093. PROCEDURE yWriteNodeCodes (yyt: tTree);
  2094.  BEGIN
  2095.   yyWriteSelector ('Export'); Texts.WriteText (yyf, yyt^.Codes.Export); yyWriteNl;
  2096.   yyWriteSelector ('Import'); Texts.WriteText (yyf, yyt^.Codes.Import); yyWriteNl;
  2097.   yyWriteSelector ('Global'); Texts.WriteText (yyf, yyt^.Codes.Global); yyWriteNl;
  2098.   yyWriteSelector ('Local'); Texts.WriteText (yyf, yyt^.Codes.Local); yyWriteNl;
  2099.   yyWriteSelector ('Begin'); Texts.WriteText (yyf, yyt^.Codes.Begin); yyWriteNl;
  2100.   yyWriteSelector ('Close'); Texts.WriteText (yyf, yyt^.Codes.Close); yyWriteNl;
  2101.   yyWriteSelector ('ExportLine'); Positions.WritePosition (yyf, yyt^.Codes.ExportLine); yyWriteNl;
  2102.   yyWriteSelector ('ImportLine'); Positions.WritePosition (yyf, yyt^.Codes.ImportLine); yyWriteNl;
  2103.   yyWriteSelector ('GlobalLine'); Positions.WritePosition (yyf, yyt^.Codes.GlobalLine); yyWriteNl;
  2104.   yyWriteSelector ('LocalLine'); Positions.WritePosition (yyf, yyt^.Codes.LocalLine); yyWriteNl;
  2105.   yyWriteSelector ('BeginLine'); Positions.WritePosition (yyf, yyt^.Codes.BeginLine); yyWriteNl;
  2106.   yyWriteSelector ('CloseLine'); Positions.WritePosition (yyf, yyt^.Codes.CloseLine); yyWriteNl;
  2107.  END yWriteNodeCodes;
  2108.  
  2109. PROCEDURE yWriteNodeDesignator (yyt: tTree);
  2110.  BEGIN
  2111.   yyWriteSelector ('Selector'); Idents.WriteIdent (yyf, yyt^.Designator.Selector); yyWriteNl;
  2112.   yyWriteSelector ('Attribute'); Idents.WriteIdent (yyf, yyt^.Designator.Attribute); yyWriteNl;
  2113.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.Designator.Pos); yyWriteNl;
  2114.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Designator.Next);
  2115.   yyWriteSelector ('Object'); yyWriteHex (yyt^.Designator.Object); yyWriteNl;
  2116.   yyWriteSelector ('Type'); Idents.WriteIdent (yyf, yyt^.Designator.Type); yyWriteNl;
  2117.  END yWriteNodeDesignator;
  2118.  
  2119. PROCEDURE yWriteNodeIdent (yyt: tTree);
  2120.  BEGIN
  2121.   yyWriteSelector ('Attribute'); Idents.WriteIdent (yyf, yyt^.Ident.Attribute); yyWriteNl;
  2122.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.Ident.Pos); yyWriteNl;
  2123.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Ident.Next);
  2124.  END yWriteNodeIdent;
  2125.  
  2126. PROCEDURE yWriteNodeRemote (yyt: tTree);
  2127.  BEGIN
  2128.   yyWriteSelector ('Designators'); yyWriteAdr (yyt^.Remote.Designators);
  2129.   yyWriteSelector ('Type'); Idents.WriteIdent (yyf, yyt^.Remote.Type); yyWriteNl;
  2130.   yyWriteSelector ('Attribute'); Idents.WriteIdent (yyf, yyt^.Remote.Attribute); yyWriteNl;
  2131.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.Remote.Pos); yyWriteNl;
  2132.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Remote.Next);
  2133.  END yWriteNodeRemote;
  2134.  
  2135. PROCEDURE yWriteNodeAny (yyt: tTree);
  2136.  BEGIN
  2137.   yyWriteSelector ('Code'); StringMem.WriteString (yyf, yyt^.Any.Code); yyWriteNl;
  2138.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Any.Next);
  2139.  END yWriteNodeAny;
  2140.  
  2141. PROCEDURE yWriteNodeAnys (yyt: tTree);
  2142.  BEGIN
  2143.   yyWriteSelector ('Layouts'); yyWriteAdr (yyt^.Anys.Layouts);
  2144.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Anys.Next);
  2145.  END yWriteNodeAnys;
  2146.  
  2147. PROCEDURE yWriteNodeLayoutAny (yyt: tTree);
  2148.  BEGIN
  2149.   yyWriteSelector ('Code'); StringMem.WriteString (yyf, yyt^.LayoutAny.Code); yyWriteNl;
  2150.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.LayoutAny.Next);
  2151.  END yWriteNodeLayoutAny;
  2152.  
  2153. PROCEDURE yWriteNodeName (yyt: tTree);
  2154.  BEGIN
  2155.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.Name.Name); yyWriteNl;
  2156.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.Name.Pos); yyWriteNl;
  2157.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Name.Next);
  2158.   yyWriteSelector ('Object'); yyWriteHex (yyt^.Name.Object); yyWriteNl;
  2159.  END yWriteNodeName;
  2160.  
  2161. PROCEDURE yWriteNodeSpec (yyt: tTree);
  2162.  BEGIN
  2163.   yyWriteSelector ('TrafoName'); Idents.WriteIdent (yyf, yyt^.Spec.TrafoName); yyWriteNl;
  2164.   yyWriteSelector ('TreeNames'); yyWriteAdr (yyt^.Spec.TreeNames);
  2165.   yyWriteSelector ('Public'); yyWriteAdr (yyt^.Spec.Public);
  2166.   yyWriteSelector ('Extern'); yyWriteAdr (yyt^.Spec.Extern);
  2167.   yyWriteSelector ('Codes'); yyWriteAdr (yyt^.Spec.Codes);
  2168.   yyWriteSelector ('Routines'); yyWriteAdr (yyt^.Spec.Routines);
  2169.  END yWriteNodeSpec;
  2170.  
  2171. PROCEDURE yWriteNodeTreeName (yyt: tTree);
  2172.  BEGIN
  2173.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.TreeName.Name); yyWriteNl;
  2174.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.TreeName.Pos); yyWriteNl;
  2175.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.TreeName.Next);
  2176.   yyWriteSelector ('Classes'); yyWriteAdr (yyt^.TreeName.Classes);
  2177.   yyWriteSelector ('ClassCount'); IO.WriteI (yyf, yyt^.TreeName.ClassCount, 0); yyWriteNl;
  2178.  END yWriteNodeTreeName;
  2179.  
  2180. PROCEDURE yWriteNodeRoutine (yyt: tTree);
  2181.  BEGIN
  2182.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Routine.Next);
  2183.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.Routine.Name); yyWriteNl;
  2184.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.Routine.Pos); yyWriteNl;
  2185.   yyWriteSelector ('InParams'); yyWriteAdr (yyt^.Routine.InParams);
  2186.   yyWriteSelector ('OutParams'); yyWriteAdr (yyt^.Routine.OutParams);
  2187.   yyWriteSelector ('Extern'); yyWriteAdr (yyt^.Routine.Extern);
  2188.   yyWriteSelector ('Local'); Texts.WriteText (yyf, yyt^.Routine.Local); yyWriteNl;
  2189.   yyWriteSelector ('LocalLine'); Positions.WritePosition (yyf, yyt^.Routine.LocalLine); yyWriteNl;
  2190.   yyWriteSelector ('Rules'); yyWriteAdr (yyt^.Routine.Rules);
  2191.   yyWriteSelector ('InForm'); yyWriteAdr (yyt^.Routine.InForm);
  2192.   yyWriteSelector ('OutForm'); yyWriteAdr (yyt^.Routine.OutForm);
  2193.   yyWriteSelector ('ParamDecls'); yyWriteAdr (yyt^.Routine.ParamDecls);
  2194.   yyWriteSelector ('IsExtern'); IO.WriteB (yyf, yyt^.Routine.IsExtern); yyWriteNl;
  2195.   yyWriteSelector ('Decisions'); yyWriteAdr (yyt^.Routine.Decisions);
  2196.  END yWriteNodeRoutine;
  2197.  
  2198. PROCEDURE yWriteNodeProcedure (yyt: tTree);
  2199.  BEGIN
  2200.   yWriteNodeRoutine (yyt); 
  2201.  END yWriteNodeProcedure;
  2202.  
  2203. PROCEDURE yWriteNodeFunction (yyt: tTree);
  2204.  BEGIN
  2205.   yWriteNodeRoutine (yyt); 
  2206.   yyWriteSelector ('ReturnParams'); yyWriteAdr (yyt^.Function.ReturnParams);
  2207.   yyWriteSelector ('ReturnForm'); yyWriteAdr (yyt^.Function.ReturnForm);
  2208.  END yWriteNodeFunction;
  2209.  
  2210. PROCEDURE yWriteNodePredicate (yyt: tTree);
  2211.  BEGIN
  2212.   yWriteNodeRoutine (yyt); 
  2213.  END yWriteNodePredicate;
  2214.  
  2215. PROCEDURE yWriteNodeParam (yyt: tTree);
  2216.  BEGIN
  2217.   yyWriteSelector ('IsRef'); IO.WriteB (yyf, yyt^.Param.IsRef); yyWriteNl;
  2218.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.Param.Name); yyWriteNl;
  2219.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.Param.Pos); yyWriteNl;
  2220.   yyWriteSelector ('Type'); yyWriteAdr (yyt^.Param.Type);
  2221.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Param.Next);
  2222.  END yWriteNodeParam;
  2223.  
  2224. PROCEDURE yWriteNodeType (yyt: tTree);
  2225.  BEGIN
  2226.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.Type.Name); yyWriteNl;
  2227.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.Type.Pos); yyWriteNl;
  2228.   yyWriteSelector ('Names'); yyWriteAdr (yyt^.Type.Names);
  2229.  END yWriteNodeType;
  2230.  
  2231. PROCEDURE yWriteNodeRule (yyt: tTree);
  2232.  BEGIN
  2233.   yyWriteSelector ('Line'); Positions.WritePosition (yyf, yyt^.Rule.Line); yyWriteNl;
  2234.   yyWriteSelector ('Patterns'); yyWriteAdr (yyt^.Rule.Patterns);
  2235.   yyWriteSelector ('Exprs'); yyWriteAdr (yyt^.Rule.Exprs);
  2236.   yyWriteSelector ('Expr'); yyWriteAdr (yyt^.Rule.Expr);
  2237.   yyWriteSelector ('Statements'); yyWriteAdr (yyt^.Rule.Statements);
  2238.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Rule.Next);
  2239.   yyWriteSelector ('VarDecls'); yyWriteAdr (yyt^.Rule.VarDecls);
  2240.   yyWriteSelector ('HasTempos'); IO.WriteB (yyf, yyt^.Rule.HasTempos); yyWriteNl;
  2241.   yyWriteSelector ('HasPatterns'); IO.WriteB (yyf, yyt^.Rule.HasPatterns); yyWriteNl;
  2242.   yyWriteSelector ('Tempo'); Idents.WriteIdent (yyf, yyt^.Rule.Tempo); yyWriteNl;
  2243.   yyWriteSelector ('Index'); IO.WriteI (yyf, yyt^.Rule.Index, 0); yyWriteNl;
  2244.   yyWriteSelector ('Tests'); yyWriteAdr (yyt^.Rule.Tests);
  2245.   yyWriteSelector ('HasExit'); IO.WriteB (yyf, yyt^.Rule.HasExit); yyWriteNl;
  2246.   yyWriteSelector ('HasAssign'); IO.WriteB (yyf, yyt^.Rule.HasAssign); yyWriteNl;
  2247.   yyWriteSelector ('HasTargetCode'); IO.WriteB (yyf, yyt^.Rule.HasTargetCode); yyWriteNl;
  2248.   yyWriteSelector ('HasRejectOrFail'); IO.WriteB (yyf, yyt^.Rule.HasRejectOrFail); yyWriteNl;
  2249.  END yWriteNodeRule;
  2250.  
  2251. PROCEDURE yWriteNodeNoPattern (yyt: tTree);
  2252.  BEGIN
  2253.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.NoPattern.Pos); yyWriteNl;
  2254.  END yWriteNodeNoPattern;
  2255.  
  2256. PROCEDURE yWriteNodeOnePattern (yyt: tTree);
  2257.  BEGIN
  2258.   yyWriteSelector ('Pattern'); yyWriteAdr (yyt^.OnePattern.Pattern);
  2259.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.OnePattern.Next);
  2260.  END yWriteNodeOnePattern;
  2261.  
  2262. PROCEDURE yWriteNodeOnePatternsList (yyt: tTree);
  2263.  BEGIN
  2264.   yyWriteSelector ('Patterns'); yyWriteAdr (yyt^.OnePatternsList.Patterns);
  2265.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.OnePatternsList.Next);
  2266.  END yWriteNodeOnePatternsList;
  2267.  
  2268. PROCEDURE yWriteNodePattern (yyt: tTree);
  2269.  BEGIN
  2270.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.Pattern.Pos); yyWriteNl;
  2271.   yyWriteSelector ('Tempo'); Idents.WriteIdent (yyf, yyt^.Pattern.Tempo); yyWriteNl;
  2272.   yyWriteSelector ('TypeDesc'); yyWriteAdr (yyt^.Pattern.TypeDesc);
  2273.   yyWriteSelector ('Path'); yyWriteAdr (yyt^.Pattern.Path);
  2274.  END yWriteNodePattern;
  2275.  
  2276. PROCEDURE yWriteNodeDecompose (yyt: tTree);
  2277.  BEGIN
  2278.   yWriteNodePattern (yyt); 
  2279.   yyWriteSelector ('Selector'); Idents.WriteIdent (yyf, yyt^.Decompose.Selector); yyWriteNl;
  2280.   yyWriteSelector ('Expr'); yyWriteAdr (yyt^.Decompose.Expr);
  2281.   yyWriteSelector ('Patterns'); yyWriteAdr (yyt^.Decompose.Patterns);
  2282.   yyWriteSelector ('Widen'); IO.WriteB (yyf, yyt^.Decompose.Widen); yyWriteNl;
  2283.   yyWriteSelector ('Object'); yyWriteHex (yyt^.Decompose.Object); yyWriteNl;
  2284.  END yWriteNodeDecompose;
  2285.  
  2286. PROCEDURE yWriteNodeVarDef (yyt: tTree);
  2287.  BEGIN
  2288.   yWriteNodePattern (yyt); 
  2289.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.VarDef.Name); yyWriteNl;
  2290.   yyWriteSelector ('Object'); yyWriteHex (yyt^.VarDef.Object); yyWriteNl;
  2291.  END yWriteNodeVarDef;
  2292.  
  2293. PROCEDURE yWriteNodeNilTest (yyt: tTree);
  2294.  BEGIN
  2295.   yWriteNodePattern (yyt); 
  2296.   yyWriteSelector ('Selector'); Idents.WriteIdent (yyf, yyt^.NilTest.Selector); yyWriteNl;
  2297.  END yWriteNodeNilTest;
  2298.  
  2299. PROCEDURE yWriteNodeDontCare1 (yyt: tTree);
  2300.  BEGIN
  2301.   yWriteNodePattern (yyt); 
  2302.  END yWriteNodeDontCare1;
  2303.  
  2304. PROCEDURE yWriteNodeDontCare (yyt: tTree);
  2305.  BEGIN
  2306.   yWriteNodePattern (yyt); 
  2307.   yyWriteSelector ('Tempos'); yyWriteAdr (yyt^.DontCare.Tempos);
  2308.  END yWriteNodeDontCare;
  2309.  
  2310. PROCEDURE yWriteNodeValue (yyt: tTree);
  2311.  BEGIN
  2312.   yWriteNodePattern (yyt); 
  2313.   yyWriteSelector ('Expr'); yyWriteAdr (yyt^.Value.Expr);
  2314.  END yWriteNodeValue;
  2315.  
  2316. PROCEDURE yWriteNodeNoExpr (yyt: tTree);
  2317.  BEGIN
  2318.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.NoExpr.Pos); yyWriteNl;
  2319.  END yWriteNodeNoExpr;
  2320.  
  2321. PROCEDURE yWriteNodeOneExpr (yyt: tTree);
  2322.  BEGIN
  2323.   yyWriteSelector ('Expr'); yyWriteAdr (yyt^.OneExpr.Expr);
  2324.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.OneExpr.Next);
  2325.  END yWriteNodeOneExpr;
  2326.  
  2327. PROCEDURE yWriteNodeNamedExpr (yyt: tTree);
  2328.  BEGIN
  2329.   yWriteNodeOneExpr (yyt); 
  2330.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.NamedExpr.Name); yyWriteNl;
  2331.  END yWriteNodeNamedExpr;
  2332.  
  2333. PROCEDURE yWriteNodeExpr (yyt: tTree);
  2334.  BEGIN
  2335.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.Expr.Pos); yyWriteNl;
  2336.  END yWriteNodeExpr;
  2337.  
  2338. PROCEDURE yWriteNodeCompose (yyt: tTree);
  2339.  BEGIN
  2340.   yWriteNodeExpr (yyt); 
  2341.   yyWriteSelector ('Selector'); Idents.WriteIdent (yyf, yyt^.Compose.Selector); yyWriteNl;
  2342.   yyWriteSelector ('Expr'); yyWriteAdr (yyt^.Compose.Expr);
  2343.   yyWriteSelector ('Exprs'); yyWriteAdr (yyt^.Compose.Exprs);
  2344.   yyWriteSelector ('Widen'); IO.WriteB (yyf, yyt^.Compose.Widen); yyWriteNl;
  2345.   yyWriteSelector ('Object'); yyWriteHex (yyt^.Compose.Object); yyWriteNl;
  2346.   yyWriteSelector ('Tempo'); Idents.WriteIdent (yyf, yyt^.Compose.Tempo); yyWriteNl;
  2347.   yyWriteSelector ('TypeDesc'); yyWriteAdr (yyt^.Compose.TypeDesc);
  2348.  END yWriteNodeCompose;
  2349.  
  2350. PROCEDURE yWriteNodeVarUse (yyt: tTree);
  2351.  BEGIN
  2352.   yWriteNodeExpr (yyt); 
  2353.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.VarUse.Name); yyWriteNl;
  2354.   yyWriteSelector ('Object'); yyWriteHex (yyt^.VarUse.Object); yyWriteNl;
  2355.  END yWriteNodeVarUse;
  2356.  
  2357. PROCEDURE yWriteNodeAttrDesc (yyt: tTree);
  2358.  BEGIN
  2359.   yWriteNodeVarUse (yyt); 
  2360.   yyWriteSelector ('Attribute'); Idents.WriteIdent (yyf, yyt^.AttrDesc.Attribute); yyWriteNl;
  2361.   yyWriteSelector ('Type'); Idents.WriteIdent (yyf, yyt^.AttrDesc.Type); yyWriteNl;
  2362.  END yWriteNodeAttrDesc;
  2363.  
  2364. PROCEDURE yWriteNodeNil (yyt: tTree);
  2365.  BEGIN
  2366.   yWriteNodeExpr (yyt); 
  2367.   yyWriteSelector ('Selector'); Idents.WriteIdent (yyf, yyt^.Nil.Selector); yyWriteNl;
  2368.  END yWriteNodeNil;
  2369.  
  2370. PROCEDURE yWriteNodeCall (yyt: tTree);
  2371.  BEGIN
  2372.   yWriteNodeExpr (yyt); 
  2373.   yyWriteSelector ('Expr'); yyWriteAdr (yyt^.Call.Expr);
  2374.   yyWriteSelector ('Exprs'); yyWriteAdr (yyt^.Call.Exprs);
  2375.   yyWriteSelector ('Patterns'); yyWriteAdr (yyt^.Call.Patterns);
  2376.   yyWriteSelector ('Object'); yyWriteHex (yyt^.Call.Object); yyWriteNl;
  2377.  END yWriteNodeCall;
  2378.  
  2379. PROCEDURE yWriteNodeBinary (yyt: tTree);
  2380.  BEGIN
  2381.   yWriteNodeExpr (yyt); 
  2382.   yyWriteSelector ('Lop'); yyWriteAdr (yyt^.Binary.Lop);
  2383.   yyWriteSelector ('Operator'); Idents.WriteIdent (yyf, yyt^.Binary.Operator); yyWriteNl;
  2384.   yyWriteSelector ('Rop'); yyWriteAdr (yyt^.Binary.Rop);
  2385.  END yWriteNodeBinary;
  2386.  
  2387. PROCEDURE yWriteNodePreOperator (yyt: tTree);
  2388.  BEGIN
  2389.   yWriteNodeExpr (yyt); 
  2390.   yyWriteSelector ('Operator'); Idents.WriteIdent (yyf, yyt^.PreOperator.Operator); yyWriteNl;
  2391.   yyWriteSelector ('Expr'); yyWriteAdr (yyt^.PreOperator.Expr);
  2392.  END yWriteNodePreOperator;
  2393.  
  2394. PROCEDURE yWriteNodePostOperator (yyt: tTree);
  2395.  BEGIN
  2396.   yWriteNodeExpr (yyt); 
  2397.   yyWriteSelector ('Operator'); Idents.WriteIdent (yyf, yyt^.PostOperator.Operator); yyWriteNl;
  2398.   yyWriteSelector ('Expr'); yyWriteAdr (yyt^.PostOperator.Expr);
  2399.  END yWriteNodePostOperator;
  2400.  
  2401. PROCEDURE yWriteNodeIndex (yyt: tTree);
  2402.  BEGIN
  2403.   yWriteNodeExpr (yyt); 
  2404.   yyWriteSelector ('Expr'); yyWriteAdr (yyt^.Index.Expr);
  2405.   yyWriteSelector ('Exprs'); yyWriteAdr (yyt^.Index.Exprs);
  2406.  END yWriteNodeIndex;
  2407.  
  2408. PROCEDURE yWriteNodeParents (yyt: tTree);
  2409.  BEGIN
  2410.   yWriteNodeExpr (yyt); 
  2411.   yyWriteSelector ('Expr'); yyWriteAdr (yyt^.Parents.Expr);
  2412.  END yWriteNodeParents;
  2413.  
  2414. PROCEDURE yWriteNodeTargetExpr (yyt: tTree);
  2415.  BEGIN
  2416.   yWriteNodeExpr (yyt); 
  2417.   yyWriteSelector ('Expr'); yyWriteAdr (yyt^.TargetExpr.Expr);
  2418.   yyWriteSelector ('UsedNames'); Sets.WriteSet (yyf, yyt^.TargetExpr.UsedNames); yyWriteNl;
  2419.  END yWriteNodeTargetExpr;
  2420.  
  2421. PROCEDURE yWriteNodeStringExpr (yyt: tTree);
  2422.  BEGIN
  2423.   yWriteNodeExpr (yyt); 
  2424.   yyWriteSelector ('String'); StringMem.WriteString (yyf, yyt^.StringExpr.String); yyWriteNl;
  2425.  END yWriteNodeStringExpr;
  2426.  
  2427. PROCEDURE yWriteNodeStatement (yyt: tTree);
  2428.  BEGIN
  2429.   yyWriteSelector ('Pos'); Positions.WritePosition (yyf, yyt^.Statement.Pos); yyWriteNl;
  2430.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Statement.Next);
  2431.  END yWriteNodeStatement;
  2432.  
  2433. PROCEDURE yWriteNodeProcCall (yyt: tTree);
  2434.  BEGIN
  2435.   yWriteNodeStatement (yyt); 
  2436.   yyWriteSelector ('Call'); yyWriteAdr (yyt^.ProcCall.Call);
  2437.  END yWriteNodeProcCall;
  2438.  
  2439. PROCEDURE yWriteNodeCondition (yyt: tTree);
  2440.  BEGIN
  2441.   yWriteNodeStatement (yyt); 
  2442.   yyWriteSelector ('Expr'); yyWriteAdr (yyt^.Condition.Expr);
  2443.  END yWriteNodeCondition;
  2444.  
  2445. PROCEDURE yWriteNodeAssignment (yyt: tTree);
  2446.  BEGIN
  2447.   yWriteNodeStatement (yyt); 
  2448.   yyWriteSelector ('Adr'); yyWriteAdr (yyt^.Assignment.Adr);
  2449.   yyWriteSelector ('Expr'); yyWriteAdr (yyt^.Assignment.Expr);
  2450.   yyWriteSelector ('Object'); yyWriteHex (yyt^.Assignment.Object); yyWriteNl;
  2451.  END yWriteNodeAssignment;
  2452.  
  2453. PROCEDURE yWriteNodeReject (yyt: tTree);
  2454.  BEGIN
  2455.   yWriteNodeStatement (yyt); 
  2456.  END yWriteNodeReject;
  2457.  
  2458. PROCEDURE yWriteNodeFail (yyt: tTree);
  2459.  BEGIN
  2460.   yWriteNodeStatement (yyt); 
  2461.  END yWriteNodeFail;
  2462.  
  2463. PROCEDURE yWriteNodeTargetStmt (yyt: tTree);
  2464.  BEGIN
  2465.   yWriteNodeStatement (yyt); 
  2466.   yyWriteSelector ('Parameters'); yyWriteAdr (yyt^.TargetStmt.Parameters);
  2467.   yyWriteSelector ('Stmt'); yyWriteAdr (yyt^.TargetStmt.Stmt);
  2468.   yyWriteSelector ('UsedNames'); Sets.WriteSet (yyf, yyt^.TargetStmt.UsedNames); yyWriteNl;
  2469.  END yWriteNodeTargetStmt;
  2470.  
  2471. PROCEDURE yWriteNodeNl (yyt: tTree);
  2472.  BEGIN
  2473.   yWriteNodeStatement (yyt); 
  2474.  END yWriteNodeNl;
  2475.  
  2476. PROCEDURE yWriteNodeWriteStr (yyt: tTree);
  2477.  BEGIN
  2478.   yWriteNodeStatement (yyt); 
  2479.   yyWriteSelector ('String'); StringMem.WriteString (yyf, yyt^.WriteStr.String); yyWriteNl;
  2480.  END yWriteNodeWriteStr;
  2481.  
  2482. PROCEDURE yWriteNodeFormal (yyt: tTree);
  2483.  BEGIN
  2484.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Formal.Next);
  2485.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.Formal.Name); yyWriteNl;
  2486.   yyWriteSelector ('TypeDesc'); yyWriteAdr (yyt^.Formal.TypeDesc);
  2487.   yyWriteSelector ('Path'); yyWriteAdr (yyt^.Formal.Path);
  2488.  END yWriteNodeFormal;
  2489.  
  2490. PROCEDURE yWriteNodeDummyFormal (yyt: tTree);
  2491.  BEGIN
  2492.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.DummyFormal.Next);
  2493.  END yWriteNodeDummyFormal;
  2494.  
  2495. PROCEDURE yWriteNodeNodeTypes (yyt: tTree);
  2496.  BEGIN
  2497.   yyWriteSelector ('TreeName'); yyWriteAdr (yyt^.NodeTypes.TreeName);
  2498.   yyWriteSelector ('Types'); Sets.WriteSet (yyf, yyt^.NodeTypes.Types); yyWriteNl;
  2499.  END yWriteNodeNodeTypes;
  2500.  
  2501. PROCEDURE yWriteNodeUserType (yyt: tTree);
  2502.  BEGIN
  2503.   yyWriteSelector ('Type'); Idents.WriteIdent (yyf, yyt^.UserType.Type); yyWriteNl;
  2504.  END yWriteNodeUserType;
  2505.  
  2506. PROCEDURE yWriteNodeVar (yyt: tTree);
  2507.  BEGIN
  2508.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.Var.Name); yyWriteNl;
  2509.   yyWriteSelector ('IsOutput'); IO.WriteB (yyf, yyt^.Var.IsOutput); yyWriteNl;
  2510.   yyWriteSelector ('IsRegister'); IO.WriteB (yyf, yyt^.Var.IsRegister); yyWriteNl;
  2511.  END yWriteNodeVar;
  2512.  
  2513. PROCEDURE yWriteNodeConsType (yyt: tTree);
  2514.  BEGIN
  2515.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.ConsType.Next);
  2516.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.ConsType.Name); yyWriteNl;
  2517.  END yWriteNodeConsType;
  2518.  
  2519. PROCEDURE yWriteNodeField (yyt: tTree);
  2520.  BEGIN
  2521.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.Field.Next);
  2522.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.Field.Name); yyWriteNl;
  2523.  END yWriteNodeField;
  2524.  
  2525. PROCEDURE yWriteNodeOneTest (yyt: tTree);
  2526.  BEGIN
  2527.   yyWriteSelector ('Next'); yyWriteAdr (yyt^.OneTest.Next);
  2528.   yyWriteSelector ('Path'); yyWriteAdr (yyt^.OneTest.Path);
  2529.  END yWriteNodeOneTest;
  2530.  
  2531. PROCEDURE yWriteNodeTestKind (yyt: tTree);
  2532.  BEGIN
  2533.   yWriteNodeOneTest (yyt); 
  2534.   yyWriteSelector ('TypeDesc'); yyWriteAdr (yyt^.TestKind.TypeDesc);
  2535.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.TestKind.Name); yyWriteNl;
  2536.  END yWriteNodeTestKind;
  2537.  
  2538. PROCEDURE yWriteNodeTestIsType (yyt: tTree);
  2539.  BEGIN
  2540.   yWriteNodeOneTest (yyt); 
  2541.   yyWriteSelector ('TypeDesc'); yyWriteAdr (yyt^.TestIsType.TypeDesc);
  2542.   yyWriteSelector ('Name'); Idents.WriteIdent (yyf, yyt^.TestIsType.Name); yyWriteNl;
  2543.  END yWriteNodeTestIsType;
  2544.  
  2545. PROCEDURE yWriteNodeTestNil (yyt: tTree);
  2546.  BEGIN
  2547.   yWriteNodeOneTest (yyt); 
  2548.  END yWriteNodeTestNil;
  2549.  
  2550. PROCEDURE yWriteNodeTestNonlin (yyt: tTree);
  2551.  BEGIN
  2552.   yWriteNodeOneTest (yyt); 
  2553.   yyWriteSelector ('Path2'); yyWriteAdr (yyt^.TestNonlin.Path2);
  2554.   yyWriteSelector ('TypeDesc'); yyWriteAdr (yyt^.TestNonlin.TypeDesc);
  2555.  END yWriteNodeTestNonlin;
  2556.  
  2557. PROCEDURE yWriteNodeTestValue (yyt: tTree);
  2558.  BEGIN
  2559.   yWriteNodeOneTest (yyt); 
  2560.   yyWriteSelector ('Expr'); yyWriteAdr (yyt^.TestValue.Expr);
  2561.   yyWriteSelector ('TypeDesc'); yyWriteAdr (yyt^.TestValue.TypeDesc);
  2562.  END yWriteNodeTestValue;
  2563.  
  2564. PROCEDURE yWriteNodeDecision (yyt: tTree);
  2565.  BEGIN
  2566.   yyWriteSelector ('Then'); yyWriteAdr (yyt^.Decision.Then);
  2567.   yyWriteSelector ('Else'); yyWriteAdr (yyt^.Decision.Else);
  2568.   yyWriteSelector ('OneTest'); yyWriteAdr (yyt^.Decision.OneTest);
  2569.   yyWriteSelector ('Cases'); IO.WriteI (yyf, yyt^.Decision.Cases, 0); yyWriteNl;
  2570.   yyWriteSelector ('IsUnchanged'); IO.WriteB (yyf, yyt^.Decision.IsUnchanged); yyWriteNl;
  2571.  END yWriteNodeDecision;
  2572.  
  2573. PROCEDURE yWriteNodeDecided (yyt: tTree);
  2574.  BEGIN
  2575.   yyWriteSelector ('Else'); yyWriteAdr (yyt^.Decided.Else);
  2576.   yyWriteSelector ('Rule'); yyWriteAdr (yyt^.Decided.Rule);
  2577.  END yWriteNodeDecided;
  2578.  
  2579. PROCEDURE WriteTreeNode (yyyf: IO.tFile; yyt: tTree);
  2580.  BEGIN
  2581.   yyf := yyyf;
  2582.   IF yyt = NoTree THEN
  2583.    IO.WriteS (yyf, 'NoTree'); yyWriteNl; RETURN;
  2584.   END;
  2585.  
  2586.   CASE yyt^.Kind OF
  2587. | Classes: IO.WriteS (yyf, 'Classes'); yyWriteNl;
  2588. | NoClass: IO.WriteS (yyf, 'NoClass'); yyWriteNl;
  2589. | Class: IO.WriteS (yyf, 'Class'); yyWriteNl; yWriteNodeClass (yyt);
  2590. | Attributes: IO.WriteS (yyf, 'Attributes'); yyWriteNl;
  2591. | NoAttribute: IO.WriteS (yyf, 'NoAttribute'); yyWriteNl;
  2592. | AttrOrAction: IO.WriteS (yyf, 'AttrOrAction'); yyWriteNl; yWriteNodeAttrOrAction (yyt);
  2593. | Child: IO.WriteS (yyf, 'Child'); yyWriteNl; yWriteNodeChild (yyt);
  2594. | Attribute: IO.WriteS (yyf, 'Attribute'); yyWriteNl; yWriteNodeAttribute (yyt);
  2595. | ActionPart: IO.WriteS (yyf, 'ActionPart'); yyWriteNl; yWriteNodeActionPart (yyt);
  2596. | Codes: IO.WriteS (yyf, 'Codes'); yyWriteNl; yWriteNodeCodes (yyt);
  2597. | Designators: IO.WriteS (yyf, 'Designators'); yyWriteNl;
  2598. | NoDesignator: IO.WriteS (yyf, 'NoDesignator'); yyWriteNl;
  2599. | Designator: IO.WriteS (yyf, 'Designator'); yyWriteNl; yWriteNodeDesignator (yyt);
  2600. | Ident: IO.WriteS (yyf, 'Ident'); yyWriteNl; yWriteNodeIdent (yyt);
  2601. | Remote: IO.WriteS (yyf, 'Remote'); yyWriteNl; yWriteNodeRemote (yyt);
  2602. | Any: IO.WriteS (yyf, 'Any'); yyWriteNl; yWriteNodeAny (yyt);
  2603. | Anys: IO.WriteS (yyf, 'Anys'); yyWriteNl; yWriteNodeAnys (yyt);
  2604. | Layouts: IO.WriteS (yyf, 'Layouts'); yyWriteNl;
  2605. | NoLayout: IO.WriteS (yyf, 'NoLayout'); yyWriteNl;
  2606. | LayoutAny: IO.WriteS (yyf, 'LayoutAny'); yyWriteNl; yWriteNodeLayoutAny (yyt);
  2607. | Names: IO.WriteS (yyf, 'Names'); yyWriteNl;
  2608. | NoName: IO.WriteS (yyf, 'NoName'); yyWriteNl;
  2609. | Name: IO.WriteS (yyf, 'Name'); yyWriteNl; yWriteNodeName (yyt);
  2610. | Spec: IO.WriteS (yyf, 'Spec'); yyWriteNl; yWriteNodeSpec (yyt);
  2611. | TreeNames: IO.WriteS (yyf, 'TreeNames'); yyWriteNl;
  2612. | NoTreeName: IO.WriteS (yyf, 'NoTreeName'); yyWriteNl;
  2613. | TreeName: IO.WriteS (yyf, 'TreeName'); yyWriteNl; yWriteNodeTreeName (yyt);
  2614. | Routines: IO.WriteS (yyf, 'Routines'); yyWriteNl;
  2615. | NoRoutine: IO.WriteS (yyf, 'NoRoutine'); yyWriteNl;
  2616. | Routine: IO.WriteS (yyf, 'Routine'); yyWriteNl; yWriteNodeRoutine (yyt);
  2617. | Procedure: IO.WriteS (yyf, 'Procedure'); yyWriteNl; yWriteNodeProcedure (yyt);
  2618. | Function: IO.WriteS (yyf, 'Function'); yyWriteNl; yWriteNodeFunction (yyt);
  2619. | Predicate: IO.WriteS (yyf, 'Predicate'); yyWriteNl; yWriteNodePredicate (yyt);
  2620. | Parameters: IO.WriteS (yyf, 'Parameters'); yyWriteNl;
  2621. | NoParameter: IO.WriteS (yyf, 'NoParameter'); yyWriteNl;
  2622. | Param: IO.WriteS (yyf, 'Param'); yyWriteNl; yWriteNodeParam (yyt);
  2623. | Type: IO.WriteS (yyf, 'Type'); yyWriteNl; yWriteNodeType (yyt);
  2624. | Rules: IO.WriteS (yyf, 'Rules'); yyWriteNl;
  2625. | NoRule: IO.WriteS (yyf, 'NoRule'); yyWriteNl;
  2626. | Rule: IO.WriteS (yyf, 'Rule'); yyWriteNl; yWriteNodeRule (yyt);
  2627. | Patterns: IO.WriteS (yyf, 'Patterns'); yyWriteNl;
  2628. | NoPattern: IO.WriteS (yyf, 'NoPattern'); yyWriteNl; yWriteNodeNoPattern (yyt);
  2629. | OnePattern: IO.WriteS (yyf, 'OnePattern'); yyWriteNl; yWriteNodeOnePattern (yyt);
  2630. | PatternsList: IO.WriteS (yyf, 'PatternsList'); yyWriteNl;
  2631. | NoPatternsList: IO.WriteS (yyf, 'NoPatternsList'); yyWriteNl;
  2632. | OnePatternsList: IO.WriteS (yyf, 'OnePatternsList'); yyWriteNl; yWriteNodeOnePatternsList (yyt);
  2633. | Pattern: IO.WriteS (yyf, 'Pattern'); yyWriteNl; yWriteNodePattern (yyt);
  2634. | Decompose: IO.WriteS (yyf, 'Decompose'); yyWriteNl; yWriteNodeDecompose (yyt);
  2635. | VarDef: IO.WriteS (yyf, 'VarDef'); yyWriteNl; yWriteNodeVarDef (yyt);
  2636. | NilTest: IO.WriteS (yyf, 'NilTest'); yyWriteNl; yWriteNodeNilTest (yyt);
  2637. | DontCare1: IO.WriteS (yyf, 'DontCare1'); yyWriteNl; yWriteNodeDontCare1 (yyt);
  2638. | DontCare: IO.WriteS (yyf, 'DontCare'); yyWriteNl; yWriteNodeDontCare (yyt);
  2639. | Value: IO.WriteS (yyf, 'Value'); yyWriteNl; yWriteNodeValue (yyt);
  2640. | Exprs: IO.WriteS (yyf, 'Exprs'); yyWriteNl;
  2641. | NoExpr: IO.WriteS (yyf, 'NoExpr'); yyWriteNl; yWriteNodeNoExpr (yyt);
  2642. | OneExpr: IO.WriteS (yyf, 'OneExpr'); yyWriteNl; yWriteNodeOneExpr (yyt);
  2643. | NamedExpr: IO.WriteS (yyf, 'NamedExpr'); yyWriteNl; yWriteNodeNamedExpr (yyt);
  2644. | Expr: IO.WriteS (yyf, 'Expr'); yyWriteNl; yWriteNodeExpr (yyt);
  2645. | Compose: IO.WriteS (yyf, 'Compose'); yyWriteNl; yWriteNodeCompose (yyt);
  2646. | VarUse: IO.WriteS (yyf, 'VarUse'); yyWriteNl; yWriteNodeVarUse (yyt);
  2647. | AttrDesc: IO.WriteS (yyf, 'AttrDesc'); yyWriteNl; yWriteNodeAttrDesc (yyt);
  2648. | Nil: IO.WriteS (yyf, 'Nil'); yyWriteNl; yWriteNodeNil (yyt);
  2649. | Call: IO.WriteS (yyf, 'Call'); yyWriteNl; yWriteNodeCall (yyt);
  2650. | Binary: IO.WriteS (yyf, 'Binary'); yyWriteNl; yWriteNodeBinary (yyt);
  2651. | PreOperator: IO.WriteS (yyf, 'PreOperator'); yyWriteNl; yWriteNodePreOperator (yyt);
  2652. | PostOperator: IO.WriteS (yyf, 'PostOperator'); yyWriteNl; yWriteNodePostOperator (yyt);
  2653. | Index: IO.WriteS (yyf, 'Index'); yyWriteNl; yWriteNodeIndex (yyt);
  2654. | Parents: IO.WriteS (yyf, 'Parents'); yyWriteNl; yWriteNodeParents (yyt);
  2655. | TargetExpr: IO.WriteS (yyf, 'TargetExpr'); yyWriteNl; yWriteNodeTargetExpr (yyt);
  2656. | StringExpr: IO.WriteS (yyf, 'StringExpr'); yyWriteNl; yWriteNodeStringExpr (yyt);
  2657. | Statements: IO.WriteS (yyf, 'Statements'); yyWriteNl;
  2658. | NoStatement: IO.WriteS (yyf, 'NoStatement'); yyWriteNl;
  2659. | Statement: IO.WriteS (yyf, 'Statement'); yyWriteNl; yWriteNodeStatement (yyt);
  2660. | ProcCall: IO.WriteS (yyf, 'ProcCall'); yyWriteNl; yWriteNodeProcCall (yyt);
  2661. | Condition: IO.WriteS (yyf, 'Condition'); yyWriteNl; yWriteNodeCondition (yyt);
  2662. | Assignment: IO.WriteS (yyf, 'Assignment'); yyWriteNl; yWriteNodeAssignment (yyt);
  2663. | Reject: IO.WriteS (yyf, 'Reject'); yyWriteNl; yWriteNodeReject (yyt);
  2664. | Fail: IO.WriteS (yyf, 'Fail'); yyWriteNl; yWriteNodeFail (yyt);
  2665. | TargetStmt: IO.WriteS (yyf, 'TargetStmt'); yyWriteNl; yWriteNodeTargetStmt (yyt);
  2666. | Nl: IO.WriteS (yyf, 'Nl'); yyWriteNl; yWriteNodeNl (yyt);
  2667. | WriteStr: IO.WriteS (yyf, 'WriteStr'); yyWriteNl; yWriteNodeWriteStr (yyt);
  2668. | Formals: IO.WriteS (yyf, 'Formals'); yyWriteNl;
  2669. | NoFormal: IO.WriteS (yyf, 'NoFormal'); yyWriteNl;
  2670. | Formal: IO.WriteS (yyf, 'Formal'); yyWriteNl; yWriteNodeFormal (yyt);
  2671. | DummyFormal: IO.WriteS (yyf, 'DummyFormal'); yyWriteNl; yWriteNodeDummyFormal (yyt);
  2672. | TypeDesc: IO.WriteS (yyf, 'TypeDesc'); yyWriteNl;
  2673. | NodeTypes: IO.WriteS (yyf, 'NodeTypes'); yyWriteNl; yWriteNodeNodeTypes (yyt);
  2674. | UserType: IO.WriteS (yyf, 'UserType'); yyWriteNl; yWriteNodeUserType (yyt);
  2675. | Path: IO.WriteS (yyf, 'Path'); yyWriteNl;
  2676. | Var: IO.WriteS (yyf, 'Var'); yyWriteNl; yWriteNodeVar (yyt);
  2677. | ConsType: IO.WriteS (yyf, 'ConsType'); yyWriteNl; yWriteNodeConsType (yyt);
  2678. | Field: IO.WriteS (yyf, 'Field'); yyWriteNl; yWriteNodeField (yyt);
  2679. | Tests: IO.WriteS (yyf, 'Tests'); yyWriteNl;
  2680. | NoTest: IO.WriteS (yyf, 'NoTest'); yyWriteNl;
  2681. | OneTest: IO.WriteS (yyf, 'OneTest'); yyWriteNl; yWriteNodeOneTest (yyt);
  2682. | TestKind: IO.WriteS (yyf, 'TestKind'); yyWriteNl; yWriteNodeTestKind (yyt);
  2683. | TestIsType: IO.WriteS (yyf, 'TestIsType'); yyWriteNl; yWriteNodeTestIsType (yyt);
  2684. | TestNil: IO.WriteS (yyf, 'TestNil'); yyWriteNl; yWriteNodeTestNil (yyt);
  2685. | TestNonlin: IO.WriteS (yyf, 'TestNonlin'); yyWriteNl; yWriteNodeTestNonlin (yyt);
  2686. | TestValue: IO.WriteS (yyf, 'TestValue'); yyWriteNl; yWriteNodeTestValue (yyt);
  2687. | Decisions: IO.WriteS (yyf, 'Decisions'); yyWriteNl;
  2688. | NoDecision: IO.WriteS (yyf, 'NoDecision'); yyWriteNl;
  2689. | Decision: IO.WriteS (yyf, 'Decision'); yyWriteNl; yWriteNodeDecision (yyt);
  2690. | Decided: IO.WriteS (yyf, 'Decided'); yyWriteNl; yWriteNodeDecided (yyt);
  2691.   ELSE
  2692.   END;
  2693.  END WriteTreeNode;
  2694.  
  2695. CONST yyNil    = 374C;
  2696. CONST yyNoLabel    = 375C;
  2697. CONST yyLabelDef    = 376C;
  2698. CONST yyLabelUse    = 377C;
  2699.  
  2700. PROCEDURE ReverseTree (yyOld: tTree): tTree;
  2701.  VAR yyNew, yyNext, yyTail    : tTree;
  2702.  BEGIN
  2703.   yyNew    := yyOld;
  2704.   yyTail    := yyOld;
  2705.   LOOP
  2706.    CASE yyOld^.Kind OF
  2707. | Class: yyNext := yyOld^.Class.Next; yyOld^.Class.Next := yyNew;
  2708. | AttrOrAction: yyNext := yyOld^.AttrOrAction.Next; yyOld^.AttrOrAction.Next := yyNew;
  2709. | Child: yyNext := yyOld^.Child.Next; yyOld^.Child.Next := yyNew;
  2710. | Attribute: yyNext := yyOld^.Attribute.Next; yyOld^.Attribute.Next := yyNew;
  2711. | ActionPart: yyNext := yyOld^.ActionPart.Next; yyOld^.ActionPart.Next := yyNew;
  2712. | Designator: yyNext := yyOld^.Designator.Next; yyOld^.Designator.Next := yyNew;
  2713. | Ident: yyNext := yyOld^.Ident.Next; yyOld^.Ident.Next := yyNew;
  2714. | Remote: yyNext := yyOld^.Remote.Next; yyOld^.Remote.Next := yyNew;
  2715. | Any: yyNext := yyOld^.Any.Next; yyOld^.Any.Next := yyNew;
  2716. | Anys: yyNext := yyOld^.Anys.Next; yyOld^.Anys.Next := yyNew;
  2717. | LayoutAny: yyNext := yyOld^.LayoutAny.Next; yyOld^.LayoutAny.Next := yyNew;
  2718. | Name: yyNext := yyOld^.Name.Next; yyOld^.Name.Next := yyNew;
  2719. | TreeName: yyNext := yyOld^.TreeName.Next; yyOld^.TreeName.Next := yyNew;
  2720. | Routine: yyNext := yyOld^.Routine.Next; yyOld^.Routine.Next := yyNew;
  2721. | Procedure: yyNext := yyOld^.Procedure.Next; yyOld^.Procedure.Next := yyNew;
  2722. | Function: yyNext := yyOld^.Function.Next; yyOld^.Function.Next := yyNew;
  2723. | Predicate: yyNext := yyOld^.Predicate.Next; yyOld^.Predicate.Next := yyNew;
  2724. | Param: yyNext := yyOld^.Param.Next; yyOld^.Param.Next := yyNew;
  2725. | Rule: yyNext := yyOld^.Rule.Next; yyOld^.Rule.Next := yyNew;
  2726. | OnePattern: yyNext := yyOld^.OnePattern.Next; yyOld^.OnePattern.Next := yyNew;
  2727. | OneExpr: yyNext := yyOld^.OneExpr.Next; yyOld^.OneExpr.Next := yyNew;
  2728. | NamedExpr: yyNext := yyOld^.NamedExpr.Next; yyOld^.NamedExpr.Next := yyNew;
  2729. | Statement: yyNext := yyOld^.Statement.Next; yyOld^.Statement.Next := yyNew;
  2730. | ProcCall: yyNext := yyOld^.ProcCall.Next; yyOld^.ProcCall.Next := yyNew;
  2731. | Condition: yyNext := yyOld^.Condition.Next; yyOld^.Condition.Next := yyNew;
  2732. | Assignment: yyNext := yyOld^.Assignment.Next; yyOld^.Assignment.Next := yyNew;
  2733. | Reject: yyNext := yyOld^.Reject.Next; yyOld^.Reject.Next := yyNew;
  2734. | Fail: yyNext := yyOld^.Fail.Next; yyOld^.Fail.Next := yyNew;
  2735. | TargetStmt: yyNext := yyOld^.TargetStmt.Next; yyOld^.TargetStmt.Next := yyNew;
  2736. | Nl: yyNext := yyOld^.Nl.Next; yyOld^.Nl.Next := yyNew;
  2737. | WriteStr: yyNext := yyOld^.WriteStr.Next; yyOld^.WriteStr.Next := yyNew;
  2738. | Formal: yyNext := yyOld^.Formal.Next; yyOld^.Formal.Next := yyNew;
  2739.    ELSE EXIT;
  2740.    END;
  2741.    yyNew    := yyOld;
  2742.    yyOld    := yyNext;
  2743.   END;
  2744.   CASE yyTail^.Kind OF
  2745. | Class: yyTail^.Class.Next := yyOld;
  2746. | AttrOrAction: yyTail^.AttrOrAction.Next := yyOld;
  2747. | Child: yyTail^.Child.Next := yyOld;
  2748. | Attribute: yyTail^.Attribute.Next := yyOld;
  2749. | ActionPart: yyTail^.ActionPart.Next := yyOld;
  2750. | Designator: yyTail^.Designator.Next := yyOld;
  2751. | Ident: yyTail^.Ident.Next := yyOld;
  2752. | Remote: yyTail^.Remote.Next := yyOld;
  2753. | Any: yyTail^.Any.Next := yyOld;
  2754. | Anys: yyTail^.Anys.Next := yyOld;
  2755. | LayoutAny: yyTail^.LayoutAny.Next := yyOld;
  2756. | Name: yyTail^.Name.Next := yyOld;
  2757. | TreeName: yyTail^.TreeName.Next := yyOld;
  2758. | Routine: yyTail^.Routine.Next := yyOld;
  2759. | Procedure: yyTail^.Procedure.Next := yyOld;
  2760. | Function: yyTail^.Function.Next := yyOld;
  2761. | Predicate: yyTail^.Predicate.Next := yyOld;
  2762. | Param: yyTail^.Param.Next := yyOld;
  2763. | Rule: yyTail^.Rule.Next := yyOld;
  2764. | OnePattern: yyTail^.OnePattern.Next := yyOld;
  2765. | OneExpr: yyTail^.OneExpr.Next := yyOld;
  2766. | NamedExpr: yyTail^.NamedExpr.Next := yyOld;
  2767. | Statement: yyTail^.Statement.Next := yyOld;
  2768. | ProcCall: yyTail^.ProcCall.Next := yyOld;
  2769. | Condition: yyTail^.Condition.Next := yyOld;
  2770. | Assignment: yyTail^.Assignment.Next := yyOld;
  2771. | Reject: yyTail^.Reject.Next := yyOld;
  2772. | Fail: yyTail^.Fail.Next := yyOld;
  2773. | TargetStmt: yyTail^.TargetStmt.Next := yyOld;
  2774. | Nl: yyTail^.Nl.Next := yyOld;
  2775. | WriteStr: yyTail^.WriteStr.Next := yyOld;
  2776. | Formal: yyTail^.Formal.Next := yyOld;
  2777.   ELSE
  2778.   END;
  2779.   RETURN yyNew;
  2780.  END ReverseTree;
  2781.  
  2782. CONST yyInitOldToNewStoreSize    = 32;
  2783.  
  2784. TYPE yytOldToNew = RECORD yyOld, yyNew: tTree; END;
  2785.  
  2786. VAR yyOldToNewStoreSize    : LONGINT;
  2787. VAR yyOldToNewStorePtr    : POINTER TO ARRAY [0..50000] OF yytOldToNew;
  2788. VAR yyOldToNewCount    : INTEGER;
  2789.  
  2790. PROCEDURE yyStoreOldToNew (yyOld, yyNew: tTree);
  2791.  BEGIN
  2792.   INC (yyOldToNewCount);
  2793.   IF (yyOldToNewCount = yyOldToNewStoreSize) THEN
  2794.    DynArray.ExtendArray (yyOldToNewStorePtr, yyOldToNewStoreSize, SYSTEM.TSIZE (yytOldToNew));
  2795.   END;
  2796.   yyOldToNewStorePtr^[yyOldToNewCount].yyOld := yyOld;
  2797.   yyOldToNewStorePtr^[yyOldToNewCount].yyNew := yyNew;
  2798.  END yyStoreOldToNew;
  2799.  
  2800. PROCEDURE yyMapOldToNew (yyOld: tTree): tTree;
  2801.  VAR yyi: INTEGER;
  2802.  BEGIN
  2803.   FOR yyi := 1 TO yyOldToNewCount DO
  2804.    IF yyOldToNewStorePtr^[yyi].yyOld = yyOld THEN
  2805.     RETURN yyOldToNewStorePtr^[yyi].yyNew;
  2806.    END;
  2807.   END;
  2808.  END yyMapOldToNew;
  2809.  
  2810. PROCEDURE yyCopyTree (yyt: tTree; yyNew: yyPtrtTree);
  2811.  BEGIN
  2812.   LOOP
  2813.    IF yyt = NoTree THEN yyNew^ := NoTree; RETURN; END;
  2814.    IF yyt^.yyHead.yyMark = 0 THEN yyNew^ := yyMapOldToNew (yyt); RETURN; END;
  2815.    yyNew^ := MakeTree (yyt^.Kind);
  2816.    IF yyt^.yyHead.yyMark > 1 THEN yyStoreOldToNew (yyt, yyNew^); END;
  2817.    yyt^.yyHead.yyMark := 0;
  2818.  
  2819.    CASE yyt^.Kind OF
  2820. | Classes: yyNew^^.Classes := yyt^.Classes;
  2821. RETURN;
  2822. | NoClass: yyNew^^.NoClass := yyt^.NoClass;
  2823. RETURN;
  2824. | Class: yyNew^^.Class := yyt^.Class;
  2825.  
  2826.  
  2827. yyCopyTree ( yyt^.Class.Attributes, SYSTEM.ADR (yyNew^^.Class.Attributes));
  2828. yyCopyTree ( yyt^.Class.Extensions, SYSTEM.ADR (yyNew^^.Class.Extensions));
  2829. yyCopyTree ( yyt^.Class.BaseClass, SYSTEM.ADR (yyNew^^.Class.BaseClass));
  2830. yyCopyTree ( yyt^.Class.Formals, SYSTEM.ADR (yyNew^^.Class.Formals));
  2831. yyCopyTree ( yyt^.Class.TypeDesc, SYSTEM.ADR (yyNew^^.Class.TypeDesc));
  2832.  
  2833. yyt := yyt^.Class.Next;
  2834. yyNew := SYSTEM.ADR (yyNew^^.Class.Next);
  2835. | Attributes: yyNew^^.Attributes := yyt^.Attributes;
  2836. RETURN;
  2837. | NoAttribute: yyNew^^.NoAttribute := yyt^.NoAttribute;
  2838. RETURN;
  2839. | AttrOrAction: yyNew^^.AttrOrAction := yyt^.AttrOrAction;
  2840. yyt := yyt^.AttrOrAction.Next;
  2841. yyNew := SYSTEM.ADR (yyNew^^.AttrOrAction.Next);
  2842. | Child: yyNew^^.Child := yyt^.Child;
  2843.  
  2844.  
  2845.  
  2846. yyt := yyt^.Child.Next;
  2847. yyNew := SYSTEM.ADR (yyNew^^.Child.Next);
  2848. | Attribute: yyNew^^.Attribute := yyt^.Attribute;
  2849.  
  2850.  
  2851.  
  2852. yyt := yyt^.Attribute.Next;
  2853. yyNew := SYSTEM.ADR (yyNew^^.Attribute.Next);
  2854. | ActionPart: yyNew^^.ActionPart := yyt^.ActionPart;
  2855. yyt := yyt^.ActionPart.Next;
  2856. yyNew := SYSTEM.ADR (yyNew^^.ActionPart.Next);
  2857. | Codes: yyNew^^.Codes := yyt^.Codes;
  2858.  
  2859.  
  2860.  
  2861.  
  2862.  
  2863.  
  2864.  
  2865.  
  2866.  
  2867.  
  2868.  
  2869.  
  2870. RETURN;
  2871. | Designators: yyNew^^.Designators := yyt^.Designators;
  2872. RETURN;
  2873. | NoDesignator: yyNew^^.NoDesignator := yyt^.NoDesignator;
  2874. RETURN;
  2875. | Designator: yyNew^^.Designator := yyt^.Designator;
  2876.  
  2877.  
  2878.  
  2879.  
  2880.  
  2881. yyt := yyt^.Designator.Next;
  2882. yyNew := SYSTEM.ADR (yyNew^^.Designator.Next);
  2883. | Ident: yyNew^^.Ident := yyt^.Ident;
  2884.  
  2885.  
  2886. yyt := yyt^.Ident.Next;
  2887. yyNew := SYSTEM.ADR (yyNew^^.Ident.Next);
  2888. | Remote: yyNew^^.Remote := yyt^.Remote;
  2889. yyCopyTree ( yyt^.Remote.Designators, SYSTEM.ADR (yyNew^^.Remote.Designators));
  2890.  
  2891.  
  2892.  
  2893. yyt := yyt^.Remote.Next;
  2894. yyNew := SYSTEM.ADR (yyNew^^.Remote.Next);
  2895. | Any: yyNew^^.Any := yyt^.Any;
  2896.  
  2897. yyt := yyt^.Any.Next;
  2898. yyNew := SYSTEM.ADR (yyNew^^.Any.Next);
  2899. | Anys: yyNew^^.Anys := yyt^.Anys;
  2900. yyCopyTree ( yyt^.Anys.Layouts, SYSTEM.ADR (yyNew^^.Anys.Layouts));
  2901. yyt := yyt^.Anys.Next;
  2902. yyNew := SYSTEM.ADR (yyNew^^.Anys.Next);
  2903. | Layouts: yyNew^^.Layouts := yyt^.Layouts;
  2904. RETURN;
  2905. | NoLayout: yyNew^^.NoLayout := yyt^.NoLayout;
  2906. RETURN;
  2907. | LayoutAny: yyNew^^.LayoutAny := yyt^.LayoutAny;
  2908.  
  2909. yyt := yyt^.LayoutAny.Next;
  2910. yyNew := SYSTEM.ADR (yyNew^^.LayoutAny.Next);
  2911. | Names: yyNew^^.Names := yyt^.Names;
  2912. RETURN;
  2913. | NoName: yyNew^^.NoName := yyt^.NoName;
  2914. RETURN;
  2915. | Name: yyNew^^.Name := yyt^.Name;
  2916.  
  2917.  
  2918.  
  2919. yyt := yyt^.Name.Next;
  2920. yyNew := SYSTEM.ADR (yyNew^^.Name.Next);
  2921. | Spec: yyNew^^.Spec := yyt^.Spec;
  2922.  
  2923. yyCopyTree ( yyt^.Spec.TreeNames, SYSTEM.ADR (yyNew^^.Spec.TreeNames));
  2924. yyCopyTree ( yyt^.Spec.Public, SYSTEM.ADR (yyNew^^.Spec.Public));
  2925. yyCopyTree ( yyt^.Spec.Extern, SYSTEM.ADR (yyNew^^.Spec.Extern));
  2926. yyCopyTree ( yyt^.Spec.Codes, SYSTEM.ADR (yyNew^^.Spec.Codes));
  2927. yyt := yyt^.Spec.Routines;
  2928. yyNew := SYSTEM.ADR (yyNew^^.Spec.Routines);
  2929. | TreeNames: yyNew^^.TreeNames := yyt^.TreeNames;
  2930. RETURN;
  2931. | NoTreeName: yyNew^^.NoTreeName := yyt^.NoTreeName;
  2932. RETURN;
  2933. | TreeName: yyNew^^.TreeName := yyt^.TreeName;
  2934.  
  2935.  
  2936. yyCopyTree ( yyt^.TreeName.Classes, SYSTEM.ADR (yyNew^^.TreeName.Classes));
  2937.  
  2938. yyt := yyt^.TreeName.Next;
  2939. yyNew := SYSTEM.ADR (yyNew^^.TreeName.Next);
  2940. | Routines: yyNew^^.Routines := yyt^.Routines;
  2941. RETURN;
  2942. | NoRoutine: yyNew^^.NoRoutine := yyt^.NoRoutine;
  2943. RETURN;
  2944. | Routine: yyNew^^.Routine := yyt^.Routine;
  2945.  
  2946.  
  2947. yyCopyTree ( yyt^.Routine.InParams, SYSTEM.ADR (yyNew^^.Routine.InParams));
  2948. yyCopyTree ( yyt^.Routine.OutParams, SYSTEM.ADR (yyNew^^.Routine.OutParams));
  2949. yyCopyTree ( yyt^.Routine.Extern, SYSTEM.ADR (yyNew^^.Routine.Extern));
  2950.  
  2951.  
  2952. yyCopyTree ( yyt^.Routine.Rules, SYSTEM.ADR (yyNew^^.Routine.Rules));
  2953. yyCopyTree ( yyt^.Routine.InForm, SYSTEM.ADR (yyNew^^.Routine.InForm));
  2954. yyCopyTree ( yyt^.Routine.OutForm, SYSTEM.ADR (yyNew^^.Routine.OutForm));
  2955. yyCopyTree ( yyt^.Routine.ParamDecls, SYSTEM.ADR (yyNew^^.Routine.ParamDecls));
  2956.  
  2957. yyCopyTree ( yyt^.Routine.Decisions, SYSTEM.ADR (yyNew^^.Routine.Decisions));
  2958. yyt := yyt^.Routine.Next;
  2959. yyNew := SYSTEM.ADR (yyNew^^.Routine.Next);
  2960. | Procedure: yyNew^^.Procedure := yyt^.Procedure;
  2961.  
  2962.  
  2963. yyCopyTree ( yyt^.Procedure.InParams, SYSTEM.ADR (yyNew^^.Procedure.InParams));
  2964. yyCopyTree ( yyt^.Procedure.OutParams, SYSTEM.ADR (yyNew^^.Procedure.OutParams));
  2965. yyCopyTree ( yyt^.Procedure.Extern, SYSTEM.ADR (yyNew^^.Procedure.Extern));
  2966.  
  2967.  
  2968. yyCopyTree ( yyt^.Procedure.Rules, SYSTEM.ADR (yyNew^^.Procedure.Rules));
  2969. yyCopyTree ( yyt^.Procedure.InForm, SYSTEM.ADR (yyNew^^.Procedure.InForm));
  2970. yyCopyTree ( yyt^.Procedure.OutForm, SYSTEM.ADR (yyNew^^.Procedure.OutForm));
  2971. yyCopyTree ( yyt^.Procedure.ParamDecls, SYSTEM.ADR (yyNew^^.Procedure.ParamDecls));
  2972.  
  2973. yyCopyTree ( yyt^.Procedure.Decisions, SYSTEM.ADR (yyNew^^.Procedure.Decisions));
  2974. yyt := yyt^.Procedure.Next;
  2975. yyNew := SYSTEM.ADR (yyNew^^.Procedure.Next);
  2976. | Function: yyNew^^.Function := yyt^.Function;
  2977.  
  2978.  
  2979. yyCopyTree ( yyt^.Function.InParams, SYSTEM.ADR (yyNew^^.Function.InParams));
  2980. yyCopyTree ( yyt^.Function.OutParams, SYSTEM.ADR (yyNew^^.Function.OutParams));
  2981. yyCopyTree ( yyt^.Function.Extern, SYSTEM.ADR (yyNew^^.Function.Extern));
  2982.  
  2983.  
  2984. yyCopyTree ( yyt^.Function.Rules, SYSTEM.ADR (yyNew^^.Function.Rules));
  2985. yyCopyTree ( yyt^.Function.InForm, SYSTEM.ADR (yyNew^^.Function.InForm));
  2986. yyCopyTree ( yyt^.Function.OutForm, SYSTEM.ADR (yyNew^^.Function.OutForm));
  2987. yyCopyTree ( yyt^.Function.ParamDecls, SYSTEM.ADR (yyNew^^.Function.ParamDecls));
  2988.  
  2989. yyCopyTree ( yyt^.Function.Decisions, SYSTEM.ADR (yyNew^^.Function.Decisions));
  2990. yyCopyTree ( yyt^.Function.ReturnParams, SYSTEM.ADR (yyNew^^.Function.ReturnParams));
  2991. yyCopyTree ( yyt^.Function.ReturnForm, SYSTEM.ADR (yyNew^^.Function.ReturnForm));
  2992. yyt := yyt^.Function.Next;
  2993. yyNew := SYSTEM.ADR (yyNew^^.Function.Next);
  2994. | Predicate: yyNew^^.Predicate := yyt^.Predicate;
  2995.  
  2996.  
  2997. yyCopyTree ( yyt^.Predicate.InParams, SYSTEM.ADR (yyNew^^.Predicate.InParams));
  2998. yyCopyTree ( yyt^.Predicate.OutParams, SYSTEM.ADR (yyNew^^.Predicate.OutParams));
  2999. yyCopyTree ( yyt^.Predicate.Extern, SYSTEM.ADR (yyNew^^.Predicate.Extern));
  3000.  
  3001.  
  3002. yyCopyTree ( yyt^.Predicate.Rules, SYSTEM.ADR (yyNew^^.Predicate.Rules));
  3003. yyCopyTree ( yyt^.Predicate.InForm, SYSTEM.ADR (yyNew^^.Predicate.InForm));
  3004. yyCopyTree ( yyt^.Predicate.OutForm, SYSTEM.ADR (yyNew^^.Predicate.OutForm));
  3005. yyCopyTree ( yyt^.Predicate.ParamDecls, SYSTEM.ADR (yyNew^^.Predicate.ParamDecls));
  3006.  
  3007. yyCopyTree ( yyt^.Predicate.Decisions, SYSTEM.ADR (yyNew^^.Predicate.Decisions));
  3008. yyt := yyt^.Predicate.Next;
  3009. yyNew := SYSTEM.ADR (yyNew^^.Predicate.Next);
  3010. | Parameters: yyNew^^.Parameters := yyt^.Parameters;
  3011. RETURN;
  3012. | NoParameter: yyNew^^.NoParameter := yyt^.NoParameter;
  3013. RETURN;
  3014. | Param: yyNew^^.Param := yyt^.Param;
  3015.  
  3016.  
  3017.  
  3018. yyCopyTree ( yyt^.Param.Type, SYSTEM.ADR (yyNew^^.Param.Type));
  3019. yyt := yyt^.Param.Next;
  3020. yyNew := SYSTEM.ADR (yyNew^^.Param.Next);
  3021. | Type: yyNew^^.Type := yyt^.Type;
  3022.  
  3023.  
  3024. yyt := yyt^.Type.Names;
  3025. yyNew := SYSTEM.ADR (yyNew^^.Type.Names);
  3026. | Rules: yyNew^^.Rules := yyt^.Rules;
  3027. RETURN;
  3028. | NoRule: yyNew^^.NoRule := yyt^.NoRule;
  3029. RETURN;
  3030. | Rule: yyNew^^.Rule := yyt^.Rule;
  3031.  
  3032. yyCopyTree ( yyt^.Rule.Patterns, SYSTEM.ADR (yyNew^^.Rule.Patterns));
  3033. yyCopyTree ( yyt^.Rule.Exprs, SYSTEM.ADR (yyNew^^.Rule.Exprs));
  3034. yyCopyTree ( yyt^.Rule.Expr, SYSTEM.ADR (yyNew^^.Rule.Expr));
  3035. yyCopyTree ( yyt^.Rule.Statements, SYSTEM.ADR (yyNew^^.Rule.Statements));
  3036. yyCopyTree ( yyt^.Rule.VarDecls, SYSTEM.ADR (yyNew^^.Rule.VarDecls));
  3037.  
  3038.  
  3039.  
  3040.  
  3041. yyCopyTree ( yyt^.Rule.Tests, SYSTEM.ADR (yyNew^^.Rule.Tests));
  3042.  
  3043.  
  3044.  
  3045.  
  3046. yyt := yyt^.Rule.Next;
  3047. yyNew := SYSTEM.ADR (yyNew^^.Rule.Next);
  3048. | Patterns: yyNew^^.Patterns := yyt^.Patterns;
  3049. RETURN;
  3050. | NoPattern: yyNew^^.NoPattern := yyt^.NoPattern;
  3051.  
  3052. RETURN;
  3053. | OnePattern: yyNew^^.OnePattern := yyt^.OnePattern;
  3054. yyCopyTree ( yyt^.OnePattern.Pattern, SYSTEM.ADR (yyNew^^.OnePattern.Pattern));
  3055. yyt := yyt^.OnePattern.Next;
  3056. yyNew := SYSTEM.ADR (yyNew^^.OnePattern.Next);
  3057. | PatternsList: yyNew^^.PatternsList := yyt^.PatternsList;
  3058. RETURN;
  3059. | NoPatternsList: yyNew^^.NoPatternsList := yyt^.NoPatternsList;
  3060. RETURN;
  3061. | OnePatternsList: yyNew^^.OnePatternsList := yyt^.OnePatternsList;
  3062. yyCopyTree ( yyt^.OnePatternsList.Patterns, SYSTEM.ADR (yyNew^^.OnePatternsList.Patterns));
  3063. yyt := yyt^.OnePatternsList.Next;
  3064. yyNew := SYSTEM.ADR (yyNew^^.OnePatternsList.Next);
  3065. | Pattern: yyNew^^.Pattern := yyt^.Pattern;
  3066.  
  3067.  
  3068. yyCopyTree ( yyt^.Pattern.TypeDesc, SYSTEM.ADR (yyNew^^.Pattern.TypeDesc));
  3069. yyt := yyt^.Pattern.Path;
  3070. yyNew := SYSTEM.ADR (yyNew^^.Pattern.Path);
  3071. | Decompose: yyNew^^.Decompose := yyt^.Decompose;
  3072.  
  3073.  
  3074. yyCopyTree ( yyt^.Decompose.TypeDesc, SYSTEM.ADR (yyNew^^.Decompose.TypeDesc));
  3075. yyCopyTree ( yyt^.Decompose.Path, SYSTEM.ADR (yyNew^^.Decompose.Path));
  3076.  
  3077. yyCopyTree ( yyt^.Decompose.Expr, SYSTEM.ADR (yyNew^^.Decompose.Expr));
  3078.  
  3079.  
  3080. yyt := yyt^.Decompose.Patterns;
  3081. yyNew := SYSTEM.ADR (yyNew^^.Decompose.Patterns);
  3082. | VarDef: yyNew^^.VarDef := yyt^.VarDef;
  3083.  
  3084.  
  3085. yyCopyTree ( yyt^.VarDef.TypeDesc, SYSTEM.ADR (yyNew^^.VarDef.TypeDesc));
  3086.  
  3087.  
  3088. yyt := yyt^.VarDef.Path;
  3089. yyNew := SYSTEM.ADR (yyNew^^.VarDef.Path);
  3090. | NilTest: yyNew^^.NilTest := yyt^.NilTest;
  3091.  
  3092.  
  3093. yyCopyTree ( yyt^.NilTest.TypeDesc, SYSTEM.ADR (yyNew^^.NilTest.TypeDesc));
  3094.  
  3095. yyt := yyt^.NilTest.Path;
  3096. yyNew := SYSTEM.ADR (yyNew^^.NilTest.Path);
  3097. | DontCare1: yyNew^^.DontCare1 := yyt^.DontCare1;
  3098.  
  3099.  
  3100. yyCopyTree ( yyt^.DontCare1.TypeDesc, SYSTEM.ADR (yyNew^^.DontCare1.TypeDesc));
  3101. yyt := yyt^.DontCare1.Path;
  3102. yyNew := SYSTEM.ADR (yyNew^^.DontCare1.Path);
  3103. | DontCare: yyNew^^.DontCare := yyt^.DontCare;
  3104.  
  3105.  
  3106. yyCopyTree ( yyt^.DontCare.TypeDesc, SYSTEM.ADR (yyNew^^.DontCare.TypeDesc));
  3107. yyCopyTree ( yyt^.DontCare.Path, SYSTEM.ADR (yyNew^^.DontCare.Path));
  3108. yyt := yyt^.DontCare.Tempos;
  3109. yyNew := SYSTEM.ADR (yyNew^^.DontCare.Tempos);
  3110. | Value: yyNew^^.Value := yyt^.Value;
  3111.  
  3112.  
  3113. yyCopyTree ( yyt^.Value.TypeDesc, SYSTEM.ADR (yyNew^^.Value.TypeDesc));
  3114. yyCopyTree ( yyt^.Value.Path, SYSTEM.ADR (yyNew^^.Value.Path));
  3115. yyt := yyt^.Value.Expr;
  3116. yyNew := SYSTEM.ADR (yyNew^^.Value.Expr);
  3117. | Exprs: yyNew^^.Exprs := yyt^.Exprs;
  3118. RETURN;
  3119. | NoExpr: yyNew^^.NoExpr := yyt^.NoExpr;
  3120.  
  3121. RETURN;
  3122. | OneExpr: yyNew^^.OneExpr := yyt^.OneExpr;
  3123. yyCopyTree ( yyt^.OneExpr.Expr, SYSTEM.ADR (yyNew^^.OneExpr.Expr));
  3124. yyt := yyt^.OneExpr.Next;
  3125. yyNew := SYSTEM.ADR (yyNew^^.OneExpr.Next);
  3126. | NamedExpr: yyNew^^.NamedExpr := yyt^.NamedExpr;
  3127. yyCopyTree ( yyt^.NamedExpr.Expr, SYSTEM.ADR (yyNew^^.NamedExpr.Expr));
  3128.  
  3129. yyt := yyt^.NamedExpr.Next;
  3130. yyNew := SYSTEM.ADR (yyNew^^.NamedExpr.Next);
  3131. | Expr: yyNew^^.Expr := yyt^.Expr;
  3132.  
  3133. RETURN;
  3134. | Compose: yyNew^^.Compose := yyt^.Compose;
  3135.  
  3136.  
  3137. yyCopyTree ( yyt^.Compose.Expr, SYSTEM.ADR (yyNew^^.Compose.Expr));
  3138. yyCopyTree ( yyt^.Compose.Exprs, SYSTEM.ADR (yyNew^^.Compose.Exprs));
  3139.  
  3140.  
  3141.  
  3142. yyt := yyt^.Compose.TypeDesc;
  3143. yyNew := SYSTEM.ADR (yyNew^^.Compose.TypeDesc);
  3144. | VarUse: yyNew^^.VarUse := yyt^.VarUse;
  3145.  
  3146.  
  3147.  
  3148. RETURN;
  3149. | AttrDesc: yyNew^^.AttrDesc := yyt^.AttrDesc;
  3150.  
  3151.  
  3152.  
  3153.  
  3154.  
  3155. RETURN;
  3156. | Nil: yyNew^^.Nil := yyt^.Nil;
  3157.  
  3158.  
  3159. RETURN;
  3160. | Call: yyNew^^.Call := yyt^.Call;
  3161.  
  3162. yyCopyTree ( yyt^.Call.Expr, SYSTEM.ADR (yyNew^^.Call.Expr));
  3163. yyCopyTree ( yyt^.Call.Exprs, SYSTEM.ADR (yyNew^^.Call.Exprs));
  3164.  
  3165. yyt := yyt^.Call.Patterns;
  3166. yyNew := SYSTEM.ADR (yyNew^^.Call.Patterns);
  3167. | Binary: yyNew^^.Binary := yyt^.Binary;
  3168.  
  3169. yyCopyTree ( yyt^.Binary.Lop, SYSTEM.ADR (yyNew^^.Binary.Lop));
  3170.  
  3171. yyt := yyt^.Binary.Rop;
  3172. yyNew := SYSTEM.ADR (yyNew^^.Binary.Rop);
  3173. | PreOperator: yyNew^^.PreOperator := yyt^.PreOperator;
  3174.  
  3175.  
  3176. yyt := yyt^.PreOperator.Expr;
  3177. yyNew := SYSTEM.ADR (yyNew^^.PreOperator.Expr);
  3178. | PostOperator: yyNew^^.PostOperator := yyt^.PostOperator;
  3179.  
  3180.  
  3181. yyt := yyt^.PostOperator.Expr;
  3182. yyNew := SYSTEM.ADR (yyNew^^.PostOperator.Expr);
  3183. | Index: yyNew^^.Index := yyt^.Index;
  3184.  
  3185. yyCopyTree ( yyt^.Index.Expr, SYSTEM.ADR (yyNew^^.Index.Expr));
  3186. yyt := yyt^.Index.Exprs;
  3187. yyNew := SYSTEM.ADR (yyNew^^.Index.Exprs);
  3188. | Parents: yyNew^^.Parents := yyt^.Parents;
  3189.  
  3190. yyt := yyt^.Parents.Expr;
  3191. yyNew := SYSTEM.ADR (yyNew^^.Parents.Expr);
  3192. | TargetExpr: yyNew^^.TargetExpr := yyt^.TargetExpr;
  3193.  
  3194.  
  3195. yyt := yyt^.TargetExpr.Expr;
  3196. yyNew := SYSTEM.ADR (yyNew^^.TargetExpr.Expr);
  3197. | StringExpr: yyNew^^.StringExpr := yyt^.StringExpr;
  3198.  
  3199.  
  3200. RETURN;
  3201. | Statements: yyNew^^.Statements := yyt^.Statements;
  3202. RETURN;
  3203. | NoStatement: yyNew^^.NoStatement := yyt^.NoStatement;
  3204. RETURN;
  3205. | Statement: yyNew^^.Statement := yyt^.Statement;
  3206.  
  3207. yyt := yyt^.Statement.Next;
  3208. yyNew := SYSTEM.ADR (yyNew^^.Statement.Next);
  3209. | ProcCall: yyNew^^.ProcCall := yyt^.ProcCall;
  3210.  
  3211. yyCopyTree ( yyt^.ProcCall.Call, SYSTEM.ADR (yyNew^^.ProcCall.Call));
  3212. yyt := yyt^.ProcCall.Next;
  3213. yyNew := SYSTEM.ADR (yyNew^^.ProcCall.Next);
  3214. | Condition: yyNew^^.Condition := yyt^.Condition;
  3215.  
  3216. yyCopyTree ( yyt^.Condition.Expr, SYSTEM.ADR (yyNew^^.Condition.Expr));
  3217. yyt := yyt^.Condition.Next;
  3218. yyNew := SYSTEM.ADR (yyNew^^.Condition.Next);
  3219. | Assignment: yyNew^^.Assignment := yyt^.Assignment;
  3220.  
  3221. yyCopyTree ( yyt^.Assignment.Adr, SYSTEM.ADR (yyNew^^.Assignment.Adr));
  3222. yyCopyTree ( yyt^.Assignment.Expr, SYSTEM.ADR (yyNew^^.Assignment.Expr));
  3223.  
  3224. yyt := yyt^.Assignment.Next;
  3225. yyNew := SYSTEM.ADR (yyNew^^.Assignment.Next);
  3226. | Reject: yyNew^^.Reject := yyt^.Reject;
  3227.  
  3228. yyt := yyt^.Reject.Next;
  3229. yyNew := SYSTEM.ADR (yyNew^^.Reject.Next);
  3230. | Fail: yyNew^^.Fail := yyt^.Fail;
  3231.  
  3232. yyt := yyt^.Fail.Next;
  3233. yyNew := SYSTEM.ADR (yyNew^^.Fail.Next);
  3234. | TargetStmt: yyNew^^.TargetStmt := yyt^.TargetStmt;
  3235.  
  3236. yyCopyTree ( yyt^.TargetStmt.Parameters, SYSTEM.ADR (yyNew^^.TargetStmt.Parameters));
  3237. yyCopyTree ( yyt^.TargetStmt.Stmt, SYSTEM.ADR (yyNew^^.TargetStmt.Stmt));
  3238.  
  3239. yyt := yyt^.TargetStmt.Next;
  3240. yyNew := SYSTEM.ADR (yyNew^^.TargetStmt.Next);
  3241. | Nl: yyNew^^.Nl := yyt^.Nl;
  3242.  
  3243. yyt := yyt^.Nl.Next;
  3244. yyNew := SYSTEM.ADR (yyNew^^.Nl.Next);
  3245. | WriteStr: yyNew^^.WriteStr := yyt^.WriteStr;
  3246.  
  3247.  
  3248. yyt := yyt^.WriteStr.Next;
  3249. yyNew := SYSTEM.ADR (yyNew^^.WriteStr.Next);
  3250. | Formals: yyNew^^.Formals := yyt^.Formals;
  3251. RETURN;
  3252. | NoFormal: yyNew^^.NoFormal := yyt^.NoFormal;
  3253. RETURN;
  3254. | Formal: yyNew^^.Formal := yyt^.Formal;
  3255.  
  3256. yyCopyTree ( yyt^.Formal.TypeDesc, SYSTEM.ADR (yyNew^^.Formal.TypeDesc));
  3257. yyCopyTree ( yyt^.Formal.Path, SYSTEM.ADR (yyNew^^.Formal.Path));
  3258. yyt := yyt^.Formal.Next;
  3259. yyNew := SYSTEM.ADR (yyNew^^.Formal.Next);
  3260. | DummyFormal: yyNew^^.DummyFormal := yyt^.DummyFormal;
  3261. yyt := yyt^.DummyFormal.Next;
  3262. yyNew := SYSTEM.ADR (yyNew^^.DummyFormal.Next);
  3263. | TypeDesc: yyNew^^.TypeDesc := yyt^.TypeDesc;
  3264. RETURN;
  3265. | NodeTypes: yyNew^^.NodeTypes := yyt^.NodeTypes;
  3266.  
  3267. yyt := yyt^.NodeTypes.TreeName;
  3268. yyNew := SYSTEM.ADR (yyNew^^.NodeTypes.TreeName);
  3269. | UserType: yyNew^^.UserType := yyt^.UserType;
  3270.  
  3271. RETURN;
  3272. | Path: yyNew^^.Path := yyt^.Path;
  3273. RETURN;
  3274. | Var: yyNew^^.Var := yyt^.Var;
  3275.  
  3276.  
  3277.  
  3278. RETURN;
  3279. | ConsType: yyNew^^.ConsType := yyt^.ConsType;
  3280.  
  3281. yyt := yyt^.ConsType.Next;
  3282. yyNew := SYSTEM.ADR (yyNew^^.ConsType.Next);
  3283. | Field: yyNew^^.Field := yyt^.Field;
  3284.  
  3285. yyt := yyt^.Field.Next;
  3286. yyNew := SYSTEM.ADR (yyNew^^.Field.Next);
  3287. | Tests: yyNew^^.Tests := yyt^.Tests;
  3288. RETURN;
  3289. | NoTest: yyNew^^.NoTest := yyt^.NoTest;
  3290. RETURN;
  3291. | OneTest: yyNew^^.OneTest := yyt^.OneTest;
  3292. yyCopyTree ( yyt^.OneTest.Next, SYSTEM.ADR (yyNew^^.OneTest.Next));
  3293. yyt := yyt^.OneTest.Path;
  3294. yyNew := SYSTEM.ADR (yyNew^^.OneTest.Path);
  3295. | TestKind: yyNew^^.TestKind := yyt^.TestKind;
  3296. yyCopyTree ( yyt^.TestKind.Next, SYSTEM.ADR (yyNew^^.TestKind.Next));
  3297. yyCopyTree ( yyt^.TestKind.Path, SYSTEM.ADR (yyNew^^.TestKind.Path));
  3298.  
  3299. yyt := yyt^.TestKind.TypeDesc;
  3300. yyNew := SYSTEM.ADR (yyNew^^.TestKind.TypeDesc);
  3301. | TestIsType: yyNew^^.TestIsType := yyt^.TestIsType;
  3302. yyCopyTree ( yyt^.TestIsType.Next, SYSTEM.ADR (yyNew^^.TestIsType.Next));
  3303. yyCopyTree ( yyt^.TestIsType.Path, SYSTEM.ADR (yyNew^^.TestIsType.Path));
  3304.  
  3305. yyt := yyt^.TestIsType.TypeDesc;
  3306. yyNew := SYSTEM.ADR (yyNew^^.TestIsType.TypeDesc);
  3307. | TestNil: yyNew^^.TestNil := yyt^.TestNil;
  3308. yyCopyTree ( yyt^.TestNil.Next, SYSTEM.ADR (yyNew^^.TestNil.Next));
  3309. yyt := yyt^.TestNil.Path;
  3310. yyNew := SYSTEM.ADR (yyNew^^.TestNil.Path);
  3311. | TestNonlin: yyNew^^.TestNonlin := yyt^.TestNonlin;
  3312. yyCopyTree ( yyt^.TestNonlin.Next, SYSTEM.ADR (yyNew^^.TestNonlin.Next));
  3313. yyCopyTree ( yyt^.TestNonlin.Path, SYSTEM.ADR (yyNew^^.TestNonlin.Path));
  3314. yyCopyTree ( yyt^.TestNonlin.Path2, SYSTEM.ADR (yyNew^^.TestNonlin.Path2));
  3315. yyt := yyt^.TestNonlin.TypeDesc;
  3316. yyNew := SYSTEM.ADR (yyNew^^.TestNonlin.TypeDesc);
  3317. | TestValue: yyNew^^.TestValue := yyt^.TestValue;
  3318. yyCopyTree ( yyt^.TestValue.Next, SYSTEM.ADR (yyNew^^.TestValue.Next));
  3319. yyCopyTree ( yyt^.TestValue.Path, SYSTEM.ADR (yyNew^^.TestValue.Path));
  3320. yyCopyTree ( yyt^.TestValue.Expr, SYSTEM.ADR (yyNew^^.TestValue.Expr));
  3321. yyt := yyt^.TestValue.TypeDesc;
  3322. yyNew := SYSTEM.ADR (yyNew^^.TestValue.TypeDesc);
  3323. | Decisions: yyNew^^.Decisions := yyt^.Decisions;
  3324. RETURN;
  3325. | NoDecision: yyNew^^.NoDecision := yyt^.NoDecision;
  3326. RETURN;
  3327. | Decision: yyNew^^.Decision := yyt^.Decision;
  3328. yyCopyTree ( yyt^.Decision.Then, SYSTEM.ADR (yyNew^^.Decision.Then));
  3329. yyCopyTree ( yyt^.Decision.Else, SYSTEM.ADR (yyNew^^.Decision.Else));
  3330.  
  3331.  
  3332. yyt := yyt^.Decision.OneTest;
  3333. yyNew := SYSTEM.ADR (yyNew^^.Decision.OneTest);
  3334. | Decided: yyNew^^.Decided := yyt^.Decided;
  3335. yyCopyTree ( yyt^.Decided.Else, SYSTEM.ADR (yyNew^^.Decided.Else));
  3336. yyt := yyt^.Decided.Rule;
  3337. yyNew := SYSTEM.ADR (yyNew^^.Decided.Rule);
  3338.    ELSE
  3339.    END;
  3340.   END;
  3341.  END yyCopyTree;
  3342.  
  3343. PROCEDURE CopyTree (yyt: tTree): tTree;
  3344.  VAR yyNew    : tTree;
  3345.  BEGIN
  3346.   yyMark (yyt);
  3347.   yyOldToNewCount := 0;
  3348.   yyCopyTree (yyt, SYSTEM.ADR (yyNew));
  3349.   RETURN yyNew;
  3350.  END CopyTree;
  3351.  
  3352. CONST yyyWrite = 1; yyyRead = 2; yyyQuit = 3;
  3353.  
  3354. VAR yyString    : ARRAY [0..31] OF CHAR;
  3355. VAR yyLength    : INTEGER;
  3356. VAR yyCh    : CHAR;
  3357. VAR yyState    : INTEGER;
  3358.  
  3359. PROCEDURE yyyIsEqual (yya: ARRAY OF CHAR): BOOLEAN;
  3360.  VAR yyi    : INTEGER;
  3361.  BEGIN
  3362.   IF (yyLength >= 0) AND (yyString [yyLength] = ' ') THEN
  3363.    IF yyLength - 1 # INTEGER (HIGH (yya)) THEN RETURN FALSE; END;
  3364.    FOR yyi := 0 TO yyLength - 1 DO
  3365.     IF yyString [yyi] # yya [yyi] THEN RETURN FALSE; END;
  3366.    END;
  3367.   ELSE
  3368.    IF yyLength > INTEGER (HIGH (yya)) THEN RETURN FALSE; END;
  3369.    FOR yyi := 0 TO yyLength DO
  3370.     IF yyString [yyi] # yya [yyi] THEN RETURN FALSE; END;
  3371.    END;
  3372.   END;
  3373.   RETURN TRUE;
  3374.  END yyyIsEqual;
  3375.  
  3376. PROCEDURE QueryTree (yyt: tTree);
  3377.  BEGIN
  3378.   yyState := yyyWrite;
  3379.   LOOP
  3380.    CASE yyState OF
  3381.    | yyyQuit    : RETURN;
  3382.    | yyyWrite    : WriteTreeNode (IO.StdOutput, yyt); yyState := yyyRead;
  3383.    | yyyRead    : IO.WriteS (IO.StdOutput, '? '); yyLength := -1; yyCh := IO.ReadC (IO.StdInput);
  3384.     WHILE yyCh # 12C DO INC (yyLength); yyString [yyLength] := yyCh; yyCh := IO.ReadC (IO.StdInput); END;
  3385.     IF    yyyIsEqual ('parent') THEN yyState := yyyWrite; RETURN;
  3386.     ELSIF yyyIsEqual ('quit'  ) THEN yyState := yyyQuit ; RETURN;
  3387.     ELSIF yyt # NoTree THEN
  3388.      CASE yyt^.Kind OF
  3389. | Class: IF FALSE THEN
  3390. ELSIF yyyIsEqual ('Attributes') THEN QueryTree (yyt^.Class.Attributes);
  3391. ELSIF yyyIsEqual ('Extensions') THEN QueryTree (yyt^.Class.Extensions);
  3392. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Class.Next);
  3393. ELSIF yyyIsEqual ('BaseClass') THEN QueryTree (yyt^.Class.BaseClass);
  3394. ELSIF yyyIsEqual ('Formals') THEN QueryTree (yyt^.Class.Formals);
  3395. ELSIF yyyIsEqual ('TypeDesc') THEN QueryTree (yyt^.Class.TypeDesc);
  3396. END;
  3397. | AttrOrAction: IF FALSE THEN
  3398. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.AttrOrAction.Next);
  3399. END;
  3400. | Child: IF FALSE THEN
  3401. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Child.Next);
  3402. END;
  3403. | Attribute: IF FALSE THEN
  3404. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Attribute.Next);
  3405. END;
  3406. | ActionPart: IF FALSE THEN
  3407. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.ActionPart.Next);
  3408. END;
  3409. | Designator: IF FALSE THEN
  3410. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Designator.Next);
  3411. END;
  3412. | Ident: IF FALSE THEN
  3413. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Ident.Next);
  3414. END;
  3415. | Remote: IF FALSE THEN
  3416. ELSIF yyyIsEqual ('Designators') THEN QueryTree (yyt^.Remote.Designators);
  3417. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Remote.Next);
  3418. END;
  3419. | Any: IF FALSE THEN
  3420. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Any.Next);
  3421. END;
  3422. | Anys: IF FALSE THEN
  3423. ELSIF yyyIsEqual ('Layouts') THEN QueryTree (yyt^.Anys.Layouts);
  3424. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Anys.Next);
  3425. END;
  3426. | LayoutAny: IF FALSE THEN
  3427. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.LayoutAny.Next);
  3428. END;
  3429. | Name: IF FALSE THEN
  3430. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Name.Next);
  3431. END;
  3432. | Spec: IF FALSE THEN
  3433. ELSIF yyyIsEqual ('TreeNames') THEN QueryTree (yyt^.Spec.TreeNames);
  3434. ELSIF yyyIsEqual ('Public') THEN QueryTree (yyt^.Spec.Public);
  3435. ELSIF yyyIsEqual ('Extern') THEN QueryTree (yyt^.Spec.Extern);
  3436. ELSIF yyyIsEqual ('Codes') THEN QueryTree (yyt^.Spec.Codes);
  3437. ELSIF yyyIsEqual ('Routines') THEN QueryTree (yyt^.Spec.Routines);
  3438. END;
  3439. | TreeName: IF FALSE THEN
  3440. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.TreeName.Next);
  3441. ELSIF yyyIsEqual ('Classes') THEN QueryTree (yyt^.TreeName.Classes);
  3442. END;
  3443. | Routine: IF FALSE THEN
  3444. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Routine.Next);
  3445. ELSIF yyyIsEqual ('InParams') THEN QueryTree (yyt^.Routine.InParams);
  3446. ELSIF yyyIsEqual ('OutParams') THEN QueryTree (yyt^.Routine.OutParams);
  3447. ELSIF yyyIsEqual ('Extern') THEN QueryTree (yyt^.Routine.Extern);
  3448. ELSIF yyyIsEqual ('Rules') THEN QueryTree (yyt^.Routine.Rules);
  3449. ELSIF yyyIsEqual ('InForm') THEN QueryTree (yyt^.Routine.InForm);
  3450. ELSIF yyyIsEqual ('OutForm') THEN QueryTree (yyt^.Routine.OutForm);
  3451. ELSIF yyyIsEqual ('ParamDecls') THEN QueryTree (yyt^.Routine.ParamDecls);
  3452. ELSIF yyyIsEqual ('Decisions') THEN QueryTree (yyt^.Routine.Decisions);
  3453. END;
  3454. | Procedure: IF FALSE THEN
  3455. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Procedure.Next);
  3456. ELSIF yyyIsEqual ('InParams') THEN QueryTree (yyt^.Procedure.InParams);
  3457. ELSIF yyyIsEqual ('OutParams') THEN QueryTree (yyt^.Procedure.OutParams);
  3458. ELSIF yyyIsEqual ('Extern') THEN QueryTree (yyt^.Procedure.Extern);
  3459. ELSIF yyyIsEqual ('Rules') THEN QueryTree (yyt^.Procedure.Rules);
  3460. ELSIF yyyIsEqual ('InForm') THEN QueryTree (yyt^.Procedure.InForm);
  3461. ELSIF yyyIsEqual ('OutForm') THEN QueryTree (yyt^.Procedure.OutForm);
  3462. ELSIF yyyIsEqual ('ParamDecls') THEN QueryTree (yyt^.Procedure.ParamDecls);
  3463. ELSIF yyyIsEqual ('Decisions') THEN QueryTree (yyt^.Procedure.Decisions);
  3464. END;
  3465. | Function: IF FALSE THEN
  3466. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Function.Next);
  3467. ELSIF yyyIsEqual ('InParams') THEN QueryTree (yyt^.Function.InParams);
  3468. ELSIF yyyIsEqual ('OutParams') THEN QueryTree (yyt^.Function.OutParams);
  3469. ELSIF yyyIsEqual ('Extern') THEN QueryTree (yyt^.Function.Extern);
  3470. ELSIF yyyIsEqual ('Rules') THEN QueryTree (yyt^.Function.Rules);
  3471. ELSIF yyyIsEqual ('InForm') THEN QueryTree (yyt^.Function.InForm);
  3472. ELSIF yyyIsEqual ('OutForm') THEN QueryTree (yyt^.Function.OutForm);
  3473. ELSIF yyyIsEqual ('ParamDecls') THEN QueryTree (yyt^.Function.ParamDecls);
  3474. ELSIF yyyIsEqual ('Decisions') THEN QueryTree (yyt^.Function.Decisions);
  3475. ELSIF yyyIsEqual ('ReturnParams') THEN QueryTree (yyt^.Function.ReturnParams);
  3476. ELSIF yyyIsEqual ('ReturnForm') THEN QueryTree (yyt^.Function.ReturnForm);
  3477. END;
  3478. | Predicate: IF FALSE THEN
  3479. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Predicate.Next);
  3480. ELSIF yyyIsEqual ('InParams') THEN QueryTree (yyt^.Predicate.InParams);
  3481. ELSIF yyyIsEqual ('OutParams') THEN QueryTree (yyt^.Predicate.OutParams);
  3482. ELSIF yyyIsEqual ('Extern') THEN QueryTree (yyt^.Predicate.Extern);
  3483. ELSIF yyyIsEqual ('Rules') THEN QueryTree (yyt^.Predicate.Rules);
  3484. ELSIF yyyIsEqual ('InForm') THEN QueryTree (yyt^.Predicate.InForm);
  3485. ELSIF yyyIsEqual ('OutForm') THEN QueryTree (yyt^.Predicate.OutForm);
  3486. ELSIF yyyIsEqual ('ParamDecls') THEN QueryTree (yyt^.Predicate.ParamDecls);
  3487. ELSIF yyyIsEqual ('Decisions') THEN QueryTree (yyt^.Predicate.Decisions);
  3488. END;
  3489. | Param: IF FALSE THEN
  3490. ELSIF yyyIsEqual ('Type') THEN QueryTree (yyt^.Param.Type);
  3491. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Param.Next);
  3492. END;
  3493. | Type: IF FALSE THEN
  3494. ELSIF yyyIsEqual ('Names') THEN QueryTree (yyt^.Type.Names);
  3495. END;
  3496. | Rule: IF FALSE THEN
  3497. ELSIF yyyIsEqual ('Patterns') THEN QueryTree (yyt^.Rule.Patterns);
  3498. ELSIF yyyIsEqual ('Exprs') THEN QueryTree (yyt^.Rule.Exprs);
  3499. ELSIF yyyIsEqual ('Expr') THEN QueryTree (yyt^.Rule.Expr);
  3500. ELSIF yyyIsEqual ('Statements') THEN QueryTree (yyt^.Rule.Statements);
  3501. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Rule.Next);
  3502. ELSIF yyyIsEqual ('VarDecls') THEN QueryTree (yyt^.Rule.VarDecls);
  3503. ELSIF yyyIsEqual ('Tests') THEN QueryTree (yyt^.Rule.Tests);
  3504. END;
  3505. | OnePattern: IF FALSE THEN
  3506. ELSIF yyyIsEqual ('Pattern') THEN QueryTree (yyt^.OnePattern.Pattern);
  3507. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.OnePattern.Next);
  3508. END;
  3509. | OnePatternsList: IF FALSE THEN
  3510. ELSIF yyyIsEqual ('Patterns') THEN QueryTree (yyt^.OnePatternsList.Patterns);
  3511. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.OnePatternsList.Next);
  3512. END;
  3513. | Pattern: IF FALSE THEN
  3514. ELSIF yyyIsEqual ('TypeDesc') THEN QueryTree (yyt^.Pattern.TypeDesc);
  3515. ELSIF yyyIsEqual ('Path') THEN QueryTree (yyt^.Pattern.Path);
  3516. END;
  3517. | Decompose: IF FALSE THEN
  3518. ELSIF yyyIsEqual ('TypeDesc') THEN QueryTree (yyt^.Decompose.TypeDesc);
  3519. ELSIF yyyIsEqual ('Path') THEN QueryTree (yyt^.Decompose.Path);
  3520. ELSIF yyyIsEqual ('Expr') THEN QueryTree (yyt^.Decompose.Expr);
  3521. ELSIF yyyIsEqual ('Patterns') THEN QueryTree (yyt^.Decompose.Patterns);
  3522. END;
  3523. | VarDef: IF FALSE THEN
  3524. ELSIF yyyIsEqual ('TypeDesc') THEN QueryTree (yyt^.VarDef.TypeDesc);
  3525. ELSIF yyyIsEqual ('Path') THEN QueryTree (yyt^.VarDef.Path);
  3526. END;
  3527. | NilTest: IF FALSE THEN
  3528. ELSIF yyyIsEqual ('TypeDesc') THEN QueryTree (yyt^.NilTest.TypeDesc);
  3529. ELSIF yyyIsEqual ('Path') THEN QueryTree (yyt^.NilTest.Path);
  3530. END;
  3531. | DontCare1: IF FALSE THEN
  3532. ELSIF yyyIsEqual ('TypeDesc') THEN QueryTree (yyt^.DontCare1.TypeDesc);
  3533. ELSIF yyyIsEqual ('Path') THEN QueryTree (yyt^.DontCare1.Path);
  3534. END;
  3535. | DontCare: IF FALSE THEN
  3536. ELSIF yyyIsEqual ('TypeDesc') THEN QueryTree (yyt^.DontCare.TypeDesc);
  3537. ELSIF yyyIsEqual ('Path') THEN QueryTree (yyt^.DontCare.Path);
  3538. ELSIF yyyIsEqual ('Tempos') THEN QueryTree (yyt^.DontCare.Tempos);
  3539. END;
  3540. | Value: IF FALSE THEN
  3541. ELSIF yyyIsEqual ('TypeDesc') THEN QueryTree (yyt^.Value.TypeDesc);
  3542. ELSIF yyyIsEqual ('Path') THEN QueryTree (yyt^.Value.Path);
  3543. ELSIF yyyIsEqual ('Expr') THEN QueryTree (yyt^.Value.Expr);
  3544. END;
  3545. | OneExpr: IF FALSE THEN
  3546. ELSIF yyyIsEqual ('Expr') THEN QueryTree (yyt^.OneExpr.Expr);
  3547. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.OneExpr.Next);
  3548. END;
  3549. | NamedExpr: IF FALSE THEN
  3550. ELSIF yyyIsEqual ('Expr') THEN QueryTree (yyt^.NamedExpr.Expr);
  3551. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.NamedExpr.Next);
  3552. END;
  3553. | Compose: IF FALSE THEN
  3554. ELSIF yyyIsEqual ('Expr') THEN QueryTree (yyt^.Compose.Expr);
  3555. ELSIF yyyIsEqual ('Exprs') THEN QueryTree (yyt^.Compose.Exprs);
  3556. ELSIF yyyIsEqual ('TypeDesc') THEN QueryTree (yyt^.Compose.TypeDesc);
  3557. END;
  3558. | Call: IF FALSE THEN
  3559. ELSIF yyyIsEqual ('Expr') THEN QueryTree (yyt^.Call.Expr);
  3560. ELSIF yyyIsEqual ('Exprs') THEN QueryTree (yyt^.Call.Exprs);
  3561. ELSIF yyyIsEqual ('Patterns') THEN QueryTree (yyt^.Call.Patterns);
  3562. END;
  3563. | Binary: IF FALSE THEN
  3564. ELSIF yyyIsEqual ('Lop') THEN QueryTree (yyt^.Binary.Lop);
  3565. ELSIF yyyIsEqual ('Rop') THEN QueryTree (yyt^.Binary.Rop);
  3566. END;
  3567. | PreOperator: IF FALSE THEN
  3568. ELSIF yyyIsEqual ('Expr') THEN QueryTree (yyt^.PreOperator.Expr);
  3569. END;
  3570. | PostOperator: IF FALSE THEN
  3571. ELSIF yyyIsEqual ('Expr') THEN QueryTree (yyt^.PostOperator.Expr);
  3572. END;
  3573. | Index: IF FALSE THEN
  3574. ELSIF yyyIsEqual ('Expr') THEN QueryTree (yyt^.Index.Expr);
  3575. ELSIF yyyIsEqual ('Exprs') THEN QueryTree (yyt^.Index.Exprs);
  3576. END;
  3577. | Parents: IF FALSE THEN
  3578. ELSIF yyyIsEqual ('Expr') THEN QueryTree (yyt^.Parents.Expr);
  3579. END;
  3580. | TargetExpr: IF FALSE THEN
  3581. ELSIF yyyIsEqual ('Expr') THEN QueryTree (yyt^.TargetExpr.Expr);
  3582. END;
  3583. | Statement: IF FALSE THEN
  3584. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Statement.Next);
  3585. END;
  3586. | ProcCall: IF FALSE THEN
  3587. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.ProcCall.Next);
  3588. ELSIF yyyIsEqual ('Call') THEN QueryTree (yyt^.ProcCall.Call);
  3589. END;
  3590. | Condition: IF FALSE THEN
  3591. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Condition.Next);
  3592. ELSIF yyyIsEqual ('Expr') THEN QueryTree (yyt^.Condition.Expr);
  3593. END;
  3594. | Assignment: IF FALSE THEN
  3595. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Assignment.Next);
  3596. ELSIF yyyIsEqual ('Adr') THEN QueryTree (yyt^.Assignment.Adr);
  3597. ELSIF yyyIsEqual ('Expr') THEN QueryTree (yyt^.Assignment.Expr);
  3598. END;
  3599. | Reject: IF FALSE THEN
  3600. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Reject.Next);
  3601. END;
  3602. | Fail: IF FALSE THEN
  3603. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Fail.Next);
  3604. END;
  3605. | TargetStmt: IF FALSE THEN
  3606. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.TargetStmt.Next);
  3607. ELSIF yyyIsEqual ('Parameters') THEN QueryTree (yyt^.TargetStmt.Parameters);
  3608. ELSIF yyyIsEqual ('Stmt') THEN QueryTree (yyt^.TargetStmt.Stmt);
  3609. END;
  3610. | Nl: IF FALSE THEN
  3611. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Nl.Next);
  3612. END;
  3613. | WriteStr: IF FALSE THEN
  3614. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.WriteStr.Next);
  3615. END;
  3616. | Formal: IF FALSE THEN
  3617. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Formal.Next);
  3618. ELSIF yyyIsEqual ('TypeDesc') THEN QueryTree (yyt^.Formal.TypeDesc);
  3619. ELSIF yyyIsEqual ('Path') THEN QueryTree (yyt^.Formal.Path);
  3620. END;
  3621. | DummyFormal: IF FALSE THEN
  3622. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.DummyFormal.Next);
  3623. END;
  3624. | NodeTypes: IF FALSE THEN
  3625. ELSIF yyyIsEqual ('TreeName') THEN QueryTree (yyt^.NodeTypes.TreeName);
  3626. END;
  3627. | ConsType: IF FALSE THEN
  3628. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.ConsType.Next);
  3629. END;
  3630. | Field: IF FALSE THEN
  3631. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.Field.Next);
  3632. END;
  3633. | OneTest: IF FALSE THEN
  3634. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.OneTest.Next);
  3635. ELSIF yyyIsEqual ('Path') THEN QueryTree (yyt^.OneTest.Path);
  3636. END;
  3637. | TestKind: IF FALSE THEN
  3638. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.TestKind.Next);
  3639. ELSIF yyyIsEqual ('Path') THEN QueryTree (yyt^.TestKind.Path);
  3640. ELSIF yyyIsEqual ('TypeDesc') THEN QueryTree (yyt^.TestKind.TypeDesc);
  3641. END;
  3642. | TestIsType: IF FALSE THEN
  3643. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.TestIsType.Next);
  3644. ELSIF yyyIsEqual ('Path') THEN QueryTree (yyt^.TestIsType.Path);
  3645. ELSIF yyyIsEqual ('TypeDesc') THEN QueryTree (yyt^.TestIsType.TypeDesc);
  3646. END;
  3647. | TestNil: IF FALSE THEN
  3648. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.TestNil.Next);
  3649. ELSIF yyyIsEqual ('Path') THEN QueryTree (yyt^.TestNil.Path);
  3650. END;
  3651. | TestNonlin: IF FALSE THEN
  3652. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.TestNonlin.Next);
  3653. ELSIF yyyIsEqual ('Path') THEN QueryTree (yyt^.TestNonlin.Path);
  3654. ELSIF yyyIsEqual ('Path2') THEN QueryTree (yyt^.TestNonlin.Path2);
  3655. ELSIF yyyIsEqual ('TypeDesc') THEN QueryTree (yyt^.TestNonlin.TypeDesc);
  3656. END;
  3657. | TestValue: IF FALSE THEN
  3658. ELSIF yyyIsEqual ('Next') THEN QueryTree (yyt^.TestValue.Next);
  3659. ELSIF yyyIsEqual ('Path') THEN QueryTree (yyt^.TestValue.Path);
  3660. ELSIF yyyIsEqual ('Expr') THEN QueryTree (yyt^.TestValue.Expr);
  3661. ELSIF yyyIsEqual ('TypeDesc') THEN QueryTree (yyt^.TestValue.TypeDesc);
  3662. END;
  3663. | Decision: IF FALSE THEN
  3664. ELSIF yyyIsEqual ('Then') THEN QueryTree (yyt^.Decision.Then);
  3665. ELSIF yyyIsEqual ('Else') THEN QueryTree (yyt^.Decision.Else);
  3666. ELSIF yyyIsEqual ('OneTest') THEN QueryTree (yyt^.Decision.OneTest);
  3667. END;
  3668. | Decided: IF FALSE THEN
  3669. ELSIF yyyIsEqual ('Else') THEN QueryTree (yyt^.Decided.Else);
  3670. ELSIF yyyIsEqual ('Rule') THEN QueryTree (yyt^.Decided.Rule);
  3671. END;
  3672.      ELSE
  3673.      END;
  3674.     END;
  3675.    END;
  3676.   END;
  3677.  END QueryTree;
  3678.  
  3679. PROCEDURE BeginTree;
  3680.  BEGIN
  3681. (* line 297 "" *)
  3682.  
  3683.    ErrorCount := 0;
  3684.    MakeSet (Options, 127);
  3685.    NoCodeAttr  := {Test, Dummy, Virtual, Parameter};
  3686.    NoCodeClass := {Ignore, Abstract};
  3687.  
  3688. (* line 749 "" *)
  3689.  END BeginTree;
  3690.  
  3691. PROCEDURE CloseTree;
  3692.  BEGIN
  3693.  END CloseTree;
  3694.  
  3695. PROCEDURE xxExit;
  3696.  BEGIN
  3697.   IO.CloseIO; System.Exit (1);
  3698.  END xxExit;
  3699.  
  3700. BEGIN
  3701.  yyBlockList    := NIL;
  3702.  yyPoolFreePtr    := NIL;
  3703.  yyPoolMaxPtr    := NIL;
  3704.  HeapUsed    := 0;
  3705.  yyExit    := xxExit;
  3706.  yyNodeSize [Classes] := SYSTEM.TSIZE (yClasses);
  3707.  yyNodeSize [NoClass] := SYSTEM.TSIZE (yNoClass);
  3708.  yyNodeSize [Class] := SYSTEM.TSIZE (yClass);
  3709.  yyNodeSize [Attributes] := SYSTEM.TSIZE (yAttributes);
  3710.  yyNodeSize [NoAttribute] := SYSTEM.TSIZE (yNoAttribute);
  3711.  yyNodeSize [AttrOrAction] := SYSTEM.TSIZE (yAttrOrAction);
  3712.  yyNodeSize [Child] := SYSTEM.TSIZE (yChild);
  3713.  yyNodeSize [Attribute] := SYSTEM.TSIZE (yAttribute);
  3714.  yyNodeSize [ActionPart] := SYSTEM.TSIZE (yActionPart);
  3715.  yyNodeSize [Codes] := SYSTEM.TSIZE (yCodes);
  3716.  yyNodeSize [Designators] := SYSTEM.TSIZE (yDesignators);
  3717.  yyNodeSize [NoDesignator] := SYSTEM.TSIZE (yNoDesignator);
  3718.  yyNodeSize [Designator] := SYSTEM.TSIZE (yDesignator);
  3719.  yyNodeSize [Ident] := SYSTEM.TSIZE (yIdent);
  3720.  yyNodeSize [Remote] := SYSTEM.TSIZE (yRemote);
  3721.  yyNodeSize [Any] := SYSTEM.TSIZE (yAny);
  3722.  yyNodeSize [Anys] := SYSTEM.TSIZE (yAnys);
  3723.  yyNodeSize [Layouts] := SYSTEM.TSIZE (yLayouts);
  3724.  yyNodeSize [NoLayout] := SYSTEM.TSIZE (yNoLayout);
  3725.  yyNodeSize [LayoutAny] := SYSTEM.TSIZE (yLayoutAny);
  3726.  yyNodeSize [Names] := SYSTEM.TSIZE (yNames);
  3727.  yyNodeSize [NoName] := SYSTEM.TSIZE (yNoName);
  3728.  yyNodeSize [Name] := SYSTEM.TSIZE (yName);
  3729.  yyNodeSize [Spec] := SYSTEM.TSIZE (ySpec);
  3730.  yyNodeSize [TreeNames] := SYSTEM.TSIZE (yTreeNames);
  3731.  yyNodeSize [NoTreeName] := SYSTEM.TSIZE (yNoTreeName);
  3732.  yyNodeSize [TreeName] := SYSTEM.TSIZE (yTreeName);
  3733.  yyNodeSize [Routines] := SYSTEM.TSIZE (yRoutines);
  3734.  yyNodeSize [NoRoutine] := SYSTEM.TSIZE (yNoRoutine);
  3735.  yyNodeSize [Routine] := SYSTEM.TSIZE (yRoutine);
  3736.  yyNodeSize [Procedure] := SYSTEM.TSIZE (yProcedure);
  3737.  yyNodeSize [Function] := SYSTEM.TSIZE (yFunction);
  3738.  yyNodeSize [Predicate] := SYSTEM.TSIZE (yPredicate);
  3739.  yyNodeSize [Parameters] := SYSTEM.TSIZE (yParameters);
  3740.  yyNodeSize [NoParameter] := SYSTEM.TSIZE (yNoParameter);
  3741.  yyNodeSize [Param] := SYSTEM.TSIZE (yParam);
  3742.  yyNodeSize [Type] := SYSTEM.TSIZE (yType);
  3743.  yyNodeSize [Rules] := SYSTEM.TSIZE (yRules);
  3744.  yyNodeSize [NoRule] := SYSTEM.TSIZE (yNoRule);
  3745.  yyNodeSize [Rule] := SYSTEM.TSIZE (yRule);
  3746.  yyNodeSize [Patterns] := SYSTEM.TSIZE (yPatterns);
  3747.  yyNodeSize [NoPattern] := SYSTEM.TSIZE (yNoPattern);
  3748.  yyNodeSize [OnePattern] := SYSTEM.TSIZE (yOnePattern);
  3749.  yyNodeSize [PatternsList] := SYSTEM.TSIZE (yPatternsList);
  3750.  yyNodeSize [NoPatternsList] := SYSTEM.TSIZE (yNoPatternsList);
  3751.  yyNodeSize [OnePatternsList] := SYSTEM.TSIZE (yOnePatternsList);
  3752.  yyNodeSize [Pattern] := SYSTEM.TSIZE (yPattern);
  3753.  yyNodeSize [Decompose] := SYSTEM.TSIZE (yDecompose);
  3754.  yyNodeSize [VarDef] := SYSTEM.TSIZE (yVarDef);
  3755.  yyNodeSize [NilTest] := SYSTEM.TSIZE (yNilTest);
  3756.  yyNodeSize [DontCare1] := SYSTEM.TSIZE (yDontCare1);
  3757.  yyNodeSize [DontCare] := SYSTEM.TSIZE (yDontCare);
  3758.  yyNodeSize [Value] := SYSTEM.TSIZE (yValue);
  3759.  yyNodeSize [Exprs] := SYSTEM.TSIZE (yExprs);
  3760.  yyNodeSize [NoExpr] := SYSTEM.TSIZE (yNoExpr);
  3761.  yyNodeSize [OneExpr] := SYSTEM.TSIZE (yOneExpr);
  3762.  yyNodeSize [NamedExpr] := SYSTEM.TSIZE (yNamedExpr);
  3763.  yyNodeSize [Expr] := SYSTEM.TSIZE (yExpr);
  3764.  yyNodeSize [Compose] := SYSTEM.TSIZE (yCompose);
  3765.  yyNodeSize [VarUse] := SYSTEM.TSIZE (yVarUse);
  3766.  yyNodeSize [AttrDesc] := SYSTEM.TSIZE (yAttrDesc);
  3767.  yyNodeSize [Nil] := SYSTEM.TSIZE (yNil);
  3768.  yyNodeSize [Call] := SYSTEM.TSIZE (yCall);
  3769.  yyNodeSize [Binary] := SYSTEM.TSIZE (yBinary);
  3770.  yyNodeSize [PreOperator] := SYSTEM.TSIZE (yPreOperator);
  3771.  yyNodeSize [PostOperator] := SYSTEM.TSIZE (yPostOperator);
  3772.  yyNodeSize [Index] := SYSTEM.TSIZE (yIndex);
  3773.  yyNodeSize [Parents] := SYSTEM.TSIZE (yParents);
  3774.  yyNodeSize [TargetExpr] := SYSTEM.TSIZE (yTargetExpr);
  3775.  yyNodeSize [StringExpr] := SYSTEM.TSIZE (yStringExpr);
  3776.  yyNodeSize [Statements] := SYSTEM.TSIZE (yStatements);
  3777.  yyNodeSize [NoStatement] := SYSTEM.TSIZE (yNoStatement);
  3778.  yyNodeSize [Statement] := SYSTEM.TSIZE (yStatement);
  3779.  yyNodeSize [ProcCall] := SYSTEM.TSIZE (yProcCall);
  3780.  yyNodeSize [Condition] := SYSTEM.TSIZE (yCondition);
  3781.  yyNodeSize [Assignment] := SYSTEM.TSIZE (yAssignment);
  3782.  yyNodeSize [Reject] := SYSTEM.TSIZE (yReject);
  3783.  yyNodeSize [Fail] := SYSTEM.TSIZE (yFail);
  3784.  yyNodeSize [TargetStmt] := SYSTEM.TSIZE (yTargetStmt);
  3785.  yyNodeSize [Nl] := SYSTEM.TSIZE (yNl);
  3786.  yyNodeSize [WriteStr] := SYSTEM.TSIZE (yWriteStr);
  3787.  yyNodeSize [Formals] := SYSTEM.TSIZE (yFormals);
  3788.  yyNodeSize [NoFormal] := SYSTEM.TSIZE (yNoFormal);
  3789.  yyNodeSize [Formal] := SYSTEM.TSIZE (yFormal);
  3790.  yyNodeSize [DummyFormal] := SYSTEM.TSIZE (yDummyFormal);
  3791.  yyNodeSize [TypeDesc] := SYSTEM.TSIZE (yTypeDesc);
  3792.  yyNodeSize [NodeTypes] := SYSTEM.TSIZE (yNodeTypes);
  3793.  yyNodeSize [UserType] := SYSTEM.TSIZE (yUserType);
  3794.  yyNodeSize [Path] := SYSTEM.TSIZE (yPath);
  3795.  yyNodeSize [Var] := SYSTEM.TSIZE (yVar);
  3796.  yyNodeSize [ConsType] := SYSTEM.TSIZE (yConsType);
  3797.  yyNodeSize [Field] := SYSTEM.TSIZE (yField);
  3798.  yyNodeSize [Tests] := SYSTEM.TSIZE (yTests);
  3799.  yyNodeSize [NoTest] := SYSTEM.TSIZE (yNoTest);
  3800.  yyNodeSize [OneTest] := SYSTEM.TSIZE (yOneTest);
  3801.  yyNodeSize [TestKind] := SYSTEM.TSIZE (yTestKind);
  3802.  yyNodeSize [TestIsType] := SYSTEM.TSIZE (yTestIsType);
  3803.  yyNodeSize [TestNil] := SYSTEM.TSIZE (yTestNil);
  3804.  yyNodeSize [TestNonlin] := SYSTEM.TSIZE (yTestNonlin);
  3805.  yyNodeSize [TestValue] := SYSTEM.TSIZE (yTestValue);
  3806.  yyNodeSize [Decisions] := SYSTEM.TSIZE (yDecisions);
  3807.  yyNodeSize [NoDecision] := SYSTEM.TSIZE (yNoDecision);
  3808.  yyNodeSize [Decision] := SYSTEM.TSIZE (yDecision);
  3809.  yyNodeSize [Decided] := SYSTEM.TSIZE (yDecided);
  3810.  yyMaxSize    := 0;
  3811.  FOR yyi := 1 TO 129 DO
  3812.   yyNodeSize [yyi] := LONGINT (BITSET (yyNodeSize [yyi] + CARDINAL (General.MaxAlign) - 1) * General.AlignMasks [General.MaxAlign]);
  3813.   yyMaxSize := General.Max (yyNodeSize [yyi], yyMaxSize);
  3814.  END;
  3815.  yyTypeRange [Classes] := Class;
  3816.  yyTypeRange [NoClass] := NoClass;
  3817.  yyTypeRange [Class] := Class;
  3818.  yyTypeRange [Attributes] := ActionPart;
  3819.  yyTypeRange [NoAttribute] := NoAttribute;
  3820.  yyTypeRange [AttrOrAction] := ActionPart;
  3821.  yyTypeRange [Child] := Child;
  3822.  yyTypeRange [Attribute] := Attribute;
  3823.  yyTypeRange [ActionPart] := ActionPart;
  3824.  yyTypeRange [Codes] := Codes;
  3825.  yyTypeRange [Designators] := Anys;
  3826.  yyTypeRange [NoDesignator] := NoDesignator;
  3827.  yyTypeRange [Designator] := Designator;
  3828.  yyTypeRange [Ident] := Ident;
  3829.  yyTypeRange [Remote] := Remote;
  3830.  yyTypeRange [Any] := Any;
  3831.  yyTypeRange [Anys] := Anys;
  3832.  yyTypeRange [Layouts] := LayoutAny;
  3833.  yyTypeRange [NoLayout] := NoLayout;
  3834.  yyTypeRange [LayoutAny] := LayoutAny;
  3835.  yyTypeRange [Names] := Name;
  3836.  yyTypeRange [NoName] := NoName;
  3837.  yyTypeRange [Name] := Name;
  3838.  yyTypeRange [Spec] := Spec;
  3839.  yyTypeRange [TreeNames] := TreeName;
  3840.  yyTypeRange [NoTreeName] := NoTreeName;
  3841.  yyTypeRange [TreeName] := TreeName;
  3842.  yyTypeRange [Routines] := Predicate;
  3843.  yyTypeRange [NoRoutine] := NoRoutine;
  3844.  yyTypeRange [Routine] := Predicate;
  3845.  yyTypeRange [Procedure] := Procedure;
  3846.  yyTypeRange [Function] := Function;
  3847.  yyTypeRange [Predicate] := Predicate;
  3848.  yyTypeRange [Parameters] := Param;
  3849.  yyTypeRange [NoParameter] := NoParameter;
  3850.  yyTypeRange [Param] := Param;
  3851.  yyTypeRange [Type] := Type;
  3852.  yyTypeRange [Rules] := Rule;
  3853.  yyTypeRange [NoRule] := NoRule;
  3854.  yyTypeRange [Rule] := Rule;
  3855.  yyTypeRange [Patterns] := OnePattern;
  3856.  yyTypeRange [NoPattern] := NoPattern;
  3857.  yyTypeRange [OnePattern] := OnePattern;
  3858.  yyTypeRange [PatternsList] := OnePatternsList;
  3859.  yyTypeRange [NoPatternsList] := NoPatternsList;
  3860.  yyTypeRange [OnePatternsList] := OnePatternsList;
  3861.  yyTypeRange [Pattern] := Value;
  3862.  yyTypeRange [Decompose] := Decompose;
  3863.  yyTypeRange [VarDef] := VarDef;
  3864.  yyTypeRange [NilTest] := NilTest;
  3865.  yyTypeRange [DontCare1] := DontCare1;
  3866.  yyTypeRange [DontCare] := DontCare;
  3867.  yyTypeRange [Value] := Value;
  3868.  yyTypeRange [Exprs] := NamedExpr;
  3869.  yyTypeRange [NoExpr] := NoExpr;
  3870.  yyTypeRange [OneExpr] := NamedExpr;
  3871.  yyTypeRange [NamedExpr] := NamedExpr;
  3872.  yyTypeRange [Expr] := StringExpr;
  3873.  yyTypeRange [Compose] := Compose;
  3874.  yyTypeRange [VarUse] := AttrDesc;
  3875.  yyTypeRange [AttrDesc] := AttrDesc;
  3876.  yyTypeRange [Nil] := Nil;
  3877.  yyTypeRange [Call] := Call;
  3878.  yyTypeRange [Binary] := Binary;
  3879.  yyTypeRange [PreOperator] := PreOperator;
  3880.  yyTypeRange [PostOperator] := PostOperator;
  3881.  yyTypeRange [Index] := Index;
  3882.  yyTypeRange [Parents] := Parents;
  3883.  yyTypeRange [TargetExpr] := TargetExpr;
  3884.  yyTypeRange [StringExpr] := StringExpr;
  3885.  yyTypeRange [Statements] := WriteStr;
  3886.  yyTypeRange [NoStatement] := NoStatement;
  3887.  yyTypeRange [Statement] := WriteStr;
  3888.  yyTypeRange [ProcCall] := ProcCall;
  3889.  yyTypeRange [Condition] := Condition;
  3890.  yyTypeRange [Assignment] := Assignment;
  3891.  yyTypeRange [Reject] := Reject;
  3892.  yyTypeRange [Fail] := Fail;
  3893.  yyTypeRange [TargetStmt] := TargetStmt;
  3894.  yyTypeRange [Nl] := Nl;
  3895.  yyTypeRange [WriteStr] := WriteStr;
  3896.  yyTypeRange [Formals] := DummyFormal;
  3897.  yyTypeRange [NoFormal] := NoFormal;
  3898.  yyTypeRange [Formal] := Formal;
  3899.  yyTypeRange [DummyFormal] := DummyFormal;
  3900.  yyTypeRange [TypeDesc] := UserType;
  3901.  yyTypeRange [NodeTypes] := NodeTypes;
  3902.  yyTypeRange [UserType] := UserType;
  3903.  yyTypeRange [Path] := Field;
  3904.  yyTypeRange [Var] := Var;
  3905.  yyTypeRange [ConsType] := ConsType;
  3906.  yyTypeRange [Field] := Field;
  3907.  yyTypeRange [Tests] := TestValue;
  3908.  yyTypeRange [NoTest] := NoTest;
  3909.  yyTypeRange [OneTest] := TestValue;
  3910.  yyTypeRange [TestKind] := TestKind;
  3911.  yyTypeRange [TestIsType] := TestIsType;
  3912.  yyTypeRange [TestNil] := TestNil;
  3913.  yyTypeRange [TestNonlin] := TestNonlin;
  3914.  yyTypeRange [TestValue] := TestValue;
  3915.  yyTypeRange [Decisions] := Decided;
  3916.  yyTypeRange [NoDecision] := NoDecision;
  3917.  yyTypeRange [Decision] := Decision;
  3918.  yyTypeRange [Decided] := Decided;
  3919.  yyOldToNewStoreSize := yyInitOldToNewStoreSize;
  3920.  DynArray.MakeArray (yyOldToNewStorePtr, yyOldToNewStoreSize, SYSTEM.TSIZE (yytOldToNew));
  3921.  BeginTree;
  3922. END Tree.
  3923.